diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..ca7b472 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,49 @@ +name: Go + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + go: + - "1.23" + - "1.24" + steps: + - uses: actions/checkout@v3 + + - name: Set up Go (${{ matrix.go }} + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go }} + + - name: Build (${{ matrix.go }}) + run: go build ./... + build-and-test: + runs-on: ubuntu-latest + strategy: + matrix: + go: + - "1.23" + - "1.24" + steps: + - uses: actions/checkout@v3 + + - name: Set up Go (${{ matrix.go }} + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go }} + + - name: Build (${{ matrix.go }}) + run: go build ./... + + - name: Test (${{ matrix.go }}) + run: go test ./... + + - name: Tidy (${{ matrix.go }}) + run: go mod tidy diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9506757..0000000 --- a/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: go - -go: -- 1.12.x -- 1.13.x diff --git a/Makefile.update-protos b/Makefile.update-protos index e6ca703..bcf9045 100644 --- a/Makefile.update-protos +++ b/Makefile.update-protos @@ -5,22 +5,54 @@ # go get github.com/cockroachdb/protoc-gen-gogoroach # go get github.com/gogo/protobuf/types # go get github.com/gogo/protobuf/protoc-gen-gogo +# +# Note: as of 2021-04-13, we like to use a custom protoc-gen-gogo +# with additional options, to stabilize the marshalled +# encoding of objects (so that they are deterministic +# across marshal/unmarshal cycles) and reduce the memory footprint +# of objects: +# +# vanity.TurnOnStable_MarshalerAll, +# vanity.TurnOffGoUnrecognizedAll, +# vanity.TurnOffGoUnkeyedAll, +# vanity.TurnOffGoSizecacheAll, +# +# Until this is resolved, the "go get" commands above are not +# adequate; instead: +# +# 1. set the PATH env var to point to CockroachDB's `bin` +# sub-directory (after a successful CockroachDB build), where a +# suitable version of protoc-gen-gogoroach is provided. +# +# 2. run `make -f Makefile.update-protos` with this PATH active. + +export SHELL := env PWD=$(CURDIR) bash -PROTOS := $(wildcard errorspb/*.proto) +PROTOS := $(wildcard \ + errbase/internal/*.proto \ + errorspb/*.proto \ + extgrpc/*.proto \ + exthttp/*.proto \ + grpc/*.proto \ + markers/internal/*.proto \ +) GO_SOURCES = $(PROTOS:.proto=.pb.go) SED = sed SED_INPLACE := $(shell $(SED) --version 2>&1 | grep -q GNU && echo -i || echo "-i ''") all: $(PROTOS) - protoc \ - -I$$GOPATH/src/ \ - -I$$GOPATH/src/github.com \ - -I$$GOPATH/src/github.com/gogo/protobuf \ - -I$$GOPATH/src/github.com/gogo/protobuf/protobuf \ - --gogoroach_out=Mgoogle/protobuf/any.proto=github.com/gogo/protobuf/types,plugins=grpc,import_prefix=:. \ - $(PROTOS:%=$(GOPATH)/src/github.com/cockroachdb/errors/%) - mv -f github.com/cockroachdb/errors/errorspb/*.pb.go errorspb/ + set -e; for dir in $(sort $(dir $(PROTOS))); do \ + protoc \ + -I. \ + -I$$GOPATH/src/ \ + -I$$GOPATH/src/github.com \ + -I$$GOPATH/src/github.com/cockroachdb/errors \ + -I$$GOPATH/src/github.com/gogo/protobuf \ + -I$$GOPATH/src/github.com/gogo/protobuf/protobuf \ + --gogoroach_out=Mgoogle/protobuf/any.proto=github.com/gogo/protobuf/types,plugins=grpc,import_prefix=:. \ + $$dir/*.proto; \ + done $(SED) $(SED_INPLACE) -E \ -e '/import _ /d' \ -e 's!import (fmt|math) "github.com/(fmt|math)"! !g' \ diff --git a/README.md b/README.md index 55979da..0f193cc 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ automatically formats error details and strips them of PII. See also [the design RFC](https://github.com/cockroachdb/cockroach/blob/master/docs/RFCS/20190318_error_handling.md). -[![Build Status](https://travis-ci.org/cockroachdb/errors.svg?branch=master)](https://travis-ci.org/cockroachdb/errors) +![Build Status](https://github.com/cockroachdb/errors/actions/workflows/ci.yaml/badge.svg?branch=master) +[![Go Reference](https://pkg.go.dev/badge/github.com/cockroachdb/errors.svg)](https://pkg.go.dev/github.com/cockroachdb/errors) Table of contents: @@ -45,7 +46,9 @@ Table of contents: | wrappers for user-facing hints and details | | | | ✔ | | wrappers to attach secondary causes | | | | ✔ | | wrappers to attach [`logtags`](https://github.com/cockroachdb/logtags) details from `context.Context` | | | | ✔ | -| `errors.FormatError()`, `Formatter`, `Printer` | | | (under construction) | (under construction) | +| `errors.FormatError()`, `Formatter`, `Printer` | | | (under construction) | ✔ | +| `errors.SafeFormatError()`, `SafeFormatter` | | | | ✔ | +| wrapper-aware `IsPermission()`, `IsTimeout()`, `IsExist()`, `IsNotExist()` | | | | ✔ | "Forward compatibility" above refers to the ability of this library to recognize and properly handle network communication of error types it @@ -60,6 +63,8 @@ older version of the package. - test error identity with `errors.Is()` as usual. **Unique in this library**: this works even if the error has traversed the network! Also, `errors.IsAny()` to recognize two or more reference errors. +- replace uses of `os.IsPermission()`, `os.IsTimeout()`, `os.IsExist()` and `os.IsNotExist()` by their analog in sub-package `oserror` so + that they can peek through layers of wrapping. - access error causes with `errors.UnwrapOnce()` / `errors.UnwrapAll()` (note: `errors.Cause()` and `errors.Unwrap()` also provided for compatibility with other error packages). - encode/decode errors to protobuf with `errors.EncodeError()` / `errors.DecodeError()`. - extract **PII-free safe details** with `errors.GetSafeDetails()`. @@ -75,14 +80,14 @@ older version of the package. | Error detail | `Error()` and format `%s`/`%q`/`%v` | format `%+v` | `GetSafeDetails()` | Sentry report via `ReportError()` | |-----------------------------------------------------------------|-------------------------------------|--------------|-------------------------------|-----------------------------------| -| main message, eg `New()` | visible | visible | redacted | redacted | -| wrap prefix, eg `WithMessage()` | visible (as prefix) | visible | redacted | redacted | +| main message, eg `New()` | visible | visible | yes (CHANGED IN v1.6) | full (CHANGED IN v1.6) | +| wrap prefix, eg `WithMessage()` | visible (as prefix) | visible | yes (CHANGED IN v1.6) | full (CHANGED IN v1.6) | | stack trace, eg `WithStack()` | not visible | simplified | yes | full | | hint , eg `WithHint()` | not visible | visible | no | type only | | detail, eg `WithDetail()` | not visible | visible | no | type only | | assertion failure annotation, eg `WithAssertionFailure()` | not visible | visible | no | type only | | issue links, eg `WithIssueLink()`, `UnimplementedError()` | not visible | visible | yes | full | -| safe details, eg `WithSafeDetails()` | not visible | not visible | yes | full | +| safe details, eg `WithSafeDetails()` | not visible | visible | yes | full | | telemetry keys, eg. `WithTelemetryKey()` | not visible | visible | yes | full | | secondary errors, eg. `WithSecondaryError()`, `CombineErrors()` | not visible | visible | redacted, recursively | redacted, recursively | | barrier origins, eg. `Handled()` | not visible | visible | redacted, recursively | redacted, recursively | @@ -98,7 +103,7 @@ method. - `New(string) error`, `Newf(string, ...interface{}) error`, `Errorf(string, ...interface{}) error`: leaf errors with message - **when to use: common error cases.** - what it does: also captures the stack trace at point of call and redacts the provided message for safe reporting. - - how to access the detail: `Error()`, regular Go formatting. Details redacted in Sentry report. + - how to access the detail: `Error()`, regular Go formatting. **Details in Sentry report.** - see also: Section [Error composition](#Error-composition-summary) below. `errors.NewWithDepth()` variants to customize at which call depth the stack trace is captured. - `AssertionFailedf(string, ...interface{}) error`, `NewAssertionFailureWithWrappedErrf(error, string, ...interface{}) error`: signals an assertion failure / programming error. @@ -141,7 +146,7 @@ return errors.Wrap(foo(), "foo") - `Wrap(error, string) error`, `Wrapf(error, string, ...interface{}) error`: - **when to use: on error return paths.** - what it does: combines `WithMessage()`, `WithStack()`, `WithSafeDetails()`. - - how to access the details: `Error()`, regular Go formatting. Details redacted in Sentry report. + - how to access the details: `Error()`, regular Go formatting. **Details in Sentry report.** - see also: Section [Error composition](#Error-composition-summary) below. `WrapWithDepth()` variants to customize at which depth the stack trace is captured. - `WithSecondaryError(error, error) error`: annotate an error with a secondary error. @@ -201,17 +206,17 @@ return errors.Wrap(foo(), "foo") - `WithMessage(error, string) error`, `WithMessagef(error, string, ...interface{}) error`: message prefix. - when to use: probably never. Use `errors.Wrap()`/`errors.Wrapf()` instead. - what it does: adds a message prefix. - - how to access the detail: `Error()`, regular Go formatting. Not included in Sentry reports. + - how to access the detail: `Error()`, regular Go formatting, Sentry Report. - `WithDetail(error, string) error`, `WithDetailf(error, string, ...interface{}) error`, user-facing detail with contextual information. - - **when to use: need to embark a message string to output when the error is presented to a human.** + - **when to use: need to embark a message string to output when the error is presented to a developer.** - what it does: captures detail strings. - - how to access the detail: `errors.GetAllDetails()`, `errors.FlattenDetails()` (all details are preserved), format with `%+v`. + - how to access the detail: `errors.GetAllDetails()`, `errors.FlattenDetails()` (all details are preserved), format with `%+v`. Not included in Sentry reports. - `WithHint(error, string) error`, `WithHintf(error, string, ...interface{}) error`: user-facing detail with suggestion for action to take. - - **when to use: need to embark a message string to output when the error is presented to a human.** + - **when to use: need to embark a message string to output when the error is presented to an end user.** - what it does: captures hint strings. - - how to access the detail: `errors.GetAllHints()`, `errors.FlattenHints()` (hints are de-duplicated), format with `%+v`. + - how to access the detail: `errors.GetAllHints()`, `errors.FlattenHints()` (hints are de-duplicated), format with `%+v`. Not included in Sentry reports. - `WithIssueLink(error, IssueLink) error`: annotate an error with an URL and arbitrary string. - **when to use: to refer (human) users to some external resources.** @@ -243,13 +248,14 @@ return errors.Wrap(foo(), "foo") The library support PII-free strings essentially as follows: -- by default, strings included in an error object are considered to be - PII-unsafe, and are stripped out when building a Sentry report. -- some fields in the library are whitelisted by default. +- by default, many strings included in an error object are considered + to be PII-unsafe, and are stripped out when building a Sentry + report. +- some fields in the library are assumed to be PII-safe by default. - you can opt additional strings in to Sentry reports. -The following strings from this library are "whitelisted" upfront, -considered to be PII-free, and thus included in Sentry reports automatically: +The following strings from this library are considered to be PII-free, +and thus included in Sentry reports automatically: - the *type* of error objects, - stack traces (containing only file paths, line numbers, function names - arguments are not included), @@ -260,7 +266,7 @@ considered to be PII-free, and thus included in Sentry reports automatically: - the `format string` argument of `Newf`, `AssertionFailedf`, etc (the constructors ending with `...f()`), - the *type* of the additional arguments passed to the `...f()` constructors, - the *value of specific argument types* passed to the `...f()` constructors, when known to be PII-safe. - For details of which arguments are considered PII-free, see the [`Redact()` function](safedetails/redact.go). + For details of which arguments are considered PII-free, see the [`redact` package](https://github.com/cockroachdb/redact). It is possible to opt additional in to Sentry reporting, using either of the following methods: @@ -293,7 +299,7 @@ If your error type is a wrapper, you should implement a `Format()` method that redirects to `errors.FormatError()`, otherwise `%+v` will not work. Additionally, if your type has a payload not otherwise visible via `Error()`, you may want to implement -`errors.Formatter`. See [making `%+v` work with your +`errors.SafeFormatter`. See [making `%+v` work with your type](#Making-v-work-with-your-type) below for details. Finally, you may want your new error type to be portable across @@ -417,10 +423,10 @@ func myLeafDecoder(_ string, details []string, _ proto.Message) error { (For an example, see the `withTelemetry` type in [`telemetry/with_telemetry.go`](telemetry/with_telemetry.go).) -**The only case where you need a custom encoder is when your error +__The only case where you need a custom encoder is when your error type contains some fields that are not reflected in the error message (so you can't extract them back from there), and are not PII-free and -thus cannot be reported as "safe details".** +thus cannot be reported as "safe details".__ To take inspiration from examples, see the following types in the library that need a custom encoder: @@ -445,8 +451,8 @@ In short: type, this will disable the recursive application of the `%+v` flag to the causes chained from your wrapper.) -- You may optionally implement the `errors.Formatter` interface: - `FormatError(p errors.Printer) (next error)`. This is optional, but +- You may optionally implement the `errors.SafeFormatter` interface: + `SafeFormatError(p errors.Printer) (next error)`. This is optional, but should be done when some details are not included by `Error()` and should be emitted upon `%+v`. @@ -458,11 +464,11 @@ achieves this as follows: func (w *withHTTPCode) Format(s fmt.State, verb rune) { errors.FormatError(w, s, verb) } // FormatError() formats the error. -func (w *withHTTPCode) FormatError(p errors.Printer) (next error) { +func (w *withHTTPCode) SafeFormatError(p errors.Printer) (next error) { // Note: no need to print out the cause here! // FormatError() knows how to do this automatically. if p.Detail() { - p.Printf("http code: %d", w.code) + p.Printf("http code: %d", errors.Safe(w.code)) } return w.cause } @@ -490,27 +496,53 @@ proposal](https://go.googlesource.com/proposal/+/master/design/29934-error-value printing out error details, and knows how to present a chain of causes in a semi-structured format upon formatting with `%+v`. -## Error composition (summary) +### Ensuring `errors.Is` works when errors/packages are renamed + +If a Go package containing a custom error type is renamed, or the +error type itself is renamed, and errors of this type are transported +over the network, then another system with a different code layout +(e.g. running a different version of the software) may not be able to +recognize the error any more via `errors.Is`. + +To ensure that network portability continues to work across multiple +software versions, in the case error types get renamed or Go packages +get moved / renamed / etc, the server code must call +`errors.RegisterTypeMigration()` from e.g. an `init()` function. + +Example use: -| Constructor | Composes | -|------------------------------------|--------------------------------------------------------------------------------------------------| -| `New` | `NewWithDepth` (see below) | -| `Errorf` | = `Newf` | -| `Newf` | `NewWithDepthf` (see below) | -| `WithMessage` | = `pkgErr.WithMessage` | -| `Wrap` | `WrapWithDepth` (see below) | -| `Wrapf` | `WrapWithDepthf` (see below) | -| `AssertionFailed` | `AssertionFailedWithDepthf` (see below) | -| `NewWithDepth` | `goErr.New` + `WithStackDepth` (see below) | -| `NewWithDepthf` | `fmt.Errorf` + `WithSafeDetails` + `WithStackDepth` | -| `WithMessagef` | `pkgErr.WithMessagef` + `WithSafeDetails` | -| `WrapWithDepth` | `WithMessage` + `WithStackDepth` | -| `WrapWithDepthf` | `WithMessage` + `WithStackDepth` + `WithSafeDetails` | -| `AssertionFailedWithDepthf` | `fmt.Errorf` + `WithStackDepth` + `WithSafeDetails` + `WithAssertionFailure` | -| `NewAssertionErrorWithWrappedErrf` | `HandledWithMessagef` (barrier) + `WithStackDepth` + `WithSafeDetails` + `WithAssertionFailure` | +```go + previousPath := "github.com/old/path/to/error/package" + previousTypeName := "oldpackage.oldErrorName" + newErrorInstance := &newTypeName{...} + errors.RegisterTypeMigration(previousPath, previousTypeName, newErrorInstance) +``` + +## Error composition (summary) +| Constructor | Composes | +|------------------------------------|-----------------------------------------------------------------------------------| +| `New` | `NewWithDepth` (see below) | +| `Errorf` | = `Newf` | +| `Newf` | `NewWithDepthf` (see below) | +| `WithMessage` | custom wrapper with message prefix and knowledge of safe strings | +| `Wrap` | `WrapWithDepth` (see below) | +| `Wrapf` | `WrapWithDepthf` (see below) | +| `AssertionFailed` | `AssertionFailedWithDepthf` (see below) | +| `NewWithDepth` | custom leaf with knowledge of safe strings + `WithStackDepth` (see below) | +| `NewWithDepthf` | custom leaf with knowledge of safe strings + `WithSafeDetails` + `WithStackDepth` | +| `WithMessagef` | custom wrapper with message prefix and knowledge of safe strings | +| `WrapWithDepth` | `WithMessage` + `WithStackDepth` | +| `WrapWithDepthf` | `WithMessagef` + `WithStackDepth` | +| `AssertionFailedWithDepthf` | `NewWithDepthf` + `WithAssertionFailure` | +| `NewAssertionErrorWithWrappedErrf` | `HandledWithMessagef` (barrier) + `WrapWithDepthf` + `WithAssertionFailure` | +| `Join` | `JoinWithDepth` (see below) | +| `JoinWithDepth` | multi-cause wrapper + `WithStackDepth` | ## API (not constructing error objects) +The following is a summary of the non-constructor API functions, grouped by category. +Detailed documentation can be found at: https://pkg.go.dev/github.com/cockroachdb/errors + ```go // Access causes. func UnwrapAll(err error) error @@ -519,6 +551,13 @@ func Cause(err error) error // compatibility func Unwrap(err error) error // compatibility type Wrapper interface { ... } // compatibility +// Error formatting. +type Formatter interface { ... } // compatibility, not recommended +type SafeFormatter interface { ... } +type Printer interface { ... } +func FormatError(err error, s fmt.State, verb rune) +func Formattable(err error) fmt.Formatter + // Identify errors. func Is(err, reference error) bool func IsAny(err error, references ...error) bool @@ -535,10 +574,19 @@ func RegisterLeafDecoder(typeName TypeKey, decoder LeafDecoder) func RegisterLeafEncoder(typeName TypeKey, encoder LeafEncoder) func RegisterWrapperDecoder(typeName TypeKey, decoder WrapperDecoder) func RegisterWrapperEncoder(typeName TypeKey, encoder WrapperEncoder) +func RegisterWrapperEncoderWithMessageOverride (typeName TypeKey, encoder WrapperEncoderWithMessageOverride) +func RegisterMultiCauseEncoder(theType TypeKey, encoder MultiCauseEncoder) +func RegisterMultiCauseDecoder(theType TypeKey, decoder MultiCauseDecoder) type LeafEncoder = func(ctx context.Context, err error) (msg string, safeDetails []string, payload proto.Message) type LeafDecoder = func(ctx context.Context, msg string, safeDetails []string, payload proto.Message) error type WrapperEncoder = func(ctx context.Context, err error) (msgPrefix string, safeDetails []string, payload proto.Message) +type WrapperEncoderWithMessageOverride = func(ctx context.Context, err error) (msgPrefix string, safeDetails []string, payload proto.Message, overrideError bool) type WrapperDecoder = func(ctx context.Context, cause error, msgPrefix string, safeDetails []string, payload proto.Message) error +type MultiCauseEncoder = func(ctx context.Context, err error) (msg string, safeDetails []string, payload proto.Message) +type MultiCauseDecoder = func(ctx context.Context, causes []error, msgPrefix string, safeDetails []string, payload proto.Message) error + +// Registering package renames for custom error types. +func RegisterTypeMigration(previousPkgPath, previousTypeName string, newType error) // Sentry reports. func BuildSentryReport(err error) (*sentry.Event, map[string]interface{}) @@ -553,10 +601,14 @@ func GetReportableStackTrace(err error) *ReportableStackTrace type SafeDetailPayload struct { ... } func GetAllSafeDetails(err error) []SafeDetailPayload func GetSafeDetails(err error) (payload SafeDetailPayload) + +// Obsolete APIs. type SafeMessager interface { ... } -func Safe(v interface{}) SafeMessager func Redact(r interface{}) string +// Aliases redact.Safe. +func Safe(v interface{}) SafeMessager + // Assertion failures. func HasAssertionFailure(err error) bool func IsAssertionFailure(err error) bool diff --git a/assert/assert.go b/assert/assert.go index 3c58c9e..5c641a5 100644 --- a/assert/assert.go +++ b/assert/assert.go @@ -62,7 +62,7 @@ type withAssertionFailure struct { var _ error = (*withAssertionFailure)(nil) var _ fmt.Formatter = (*withAssertionFailure)(nil) -var _ errbase.Formatter = (*withAssertionFailure)(nil) +var _ errbase.SafeFormatter = (*withAssertionFailure)(nil) // ErrorHint implements the hintdetail.ErrorHinter interface. func (w *withAssertionFailure) ErrorHint() string { @@ -77,8 +77,10 @@ func (w *withAssertionFailure) Cause() error { return w.cause } func (w *withAssertionFailure) Unwrap() error { return w.cause } func (w *withAssertionFailure) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *withAssertionFailure) FormatError(p errbase.Printer) error { - p.Print("assertion failure") +func (w *withAssertionFailure) SafeFormatError(p errbase.Printer) error { + if p.Detail() { + p.Printf("assertion failure") + } return w.cause } diff --git a/assert_api.go b/assert_api.go index 419402f..d01e0bf 100644 --- a/assert_api.go +++ b/assert_api.go @@ -16,11 +16,20 @@ package errors import "github.com/cockroachdb/errors/assert" -// WithAssertionFailure forwards a definition. +// WithAssertionFailure decorates the error with an assertion failure marker. +// This is not intended to be used directly (see AssertionFailed() for +// further decoration). +// +// Detail is shown: +// - when formatting with `%+v`. +// - in Sentry reports. func WithAssertionFailure(err error) error { return assert.WithAssertionFailure(err) } -// HasAssertionFailure forwards a definition. +// HasAssertionFailure returns true if the error or any of its causes +// is an assertion failure annotation. func HasAssertionFailure(err error) bool { return assert.HasAssertionFailure(err) } -// IsAssertionFailure forwards a definition. +// IsAssertionFailure returns true if the error (not its causes) is an +// assertion failure annotation. Consider using markers.If or +// HasAssertionFailure to test both the error and its causes. func IsAssertionFailure(err error) bool { return assert.IsAssertionFailure(err) } diff --git a/barriers/barriers.go b/barriers/barriers.go index 24b03d7..54df8f3 100644 --- a/barriers/barriers.go +++ b/barriers/barriers.go @@ -19,6 +19,7 @@ import ( "fmt" "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) @@ -36,7 +37,7 @@ func Handled(err error) error { if err == nil { return nil } - return HandledWithMessage(err, err.Error()) + return HandledWithSafeMessage(err, redact.Sprint(err)) } // HandledWithMessage is like Handled except the message is overridden. @@ -46,7 +47,14 @@ func HandledWithMessage(err error, msg string) error { if err == nil { return nil } - return &barrierError{maskedErr: err, msg: msg} + return HandledWithSafeMessage(err, redact.Sprint(msg)) +} + +// HandledWithSafeMessage is like Handled except the message is overridden. +// This can be used e.g. to hide message details or to prevent +// downstream code to make assertions on the message's contents. +func HandledWithSafeMessage(err error, msg redact.RedactableString) error { + return &barrierErr{maskedErr: err, smsg: msg} } // HandledWithMessagef is like HandledWithMessagef except the message @@ -55,47 +63,48 @@ func HandledWithMessagef(err error, format string, args ...interface{}) error { if err == nil { return nil } - return &barrierError{maskedErr: err, msg: fmt.Sprintf(format, args...)} + return &barrierErr{maskedErr: err, smsg: redact.Sprintf(format, args...)} } -// barrierError is a leaf error type. It encapsulates a chain of +// barrierErr is a leaf error type. It encapsulates a chain of // original causes, but these causes are hidden so that they inhibit // matching via Is() and the Cause()/Unwrap() recursions. -type barrierError struct { +type barrierErr struct { // Message for the barrier itself. // In the common case, the message from the masked error // is used as-is (see Handled() above) however it is // useful to cache it here since the masked error may // have a long chain of wrappers and its Error() call // may be expensive. - msg string + smsg redact.RedactableString // Masked error chain. maskedErr error } -var _ error = (*barrierError)(nil) -var _ errbase.SafeDetailer = (*barrierError)(nil) -var _ errbase.Formatter = (*barrierError)(nil) -var _ fmt.Formatter = (*barrierError)(nil) +var _ error = (*barrierErr)(nil) +var _ errbase.SafeDetailer = (*barrierErr)(nil) +var _ errbase.SafeFormatter = (*barrierErr)(nil) +var _ fmt.Formatter = (*barrierErr)(nil) -// barrierError is an error. -func (e *barrierError) Error() string { return e.msg } +// barrierErr is an error. +func (e *barrierErr) Error() string { return e.smsg.StripMarkers() } // SafeDetails reports the PII-free details from the masked error. -func (e *barrierError) SafeDetails() []string { +func (e *barrierErr) SafeDetails() []string { var details []string for err := e.maskedErr; err != nil; err = errbase.UnwrapOnce(err) { sd := errbase.GetSafeDetails(err) details = sd.Fill(details) } + details = append(details, redact.Sprintf("masked error: %+v", e.maskedErr).Redact().StripMarkers()) return details } // Printing a barrier reveals the details. -func (e *barrierError) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *barrierErr) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *barrierError) FormatError(p errbase.Printer) (next error) { - p.Printf(e.msg) +func (e *barrierErr) SafeFormatError(p errbase.Printer) (next error) { + p.Print(e.smsg) if p.Detail() { p.Printf("-- cause hidden behind barrier\n%+v", e.maskedErr) } @@ -106,19 +115,37 @@ func (e *barrierError) FormatError(p errbase.Printer) (next error) { func encodeBarrier( ctx context.Context, err error, ) (msg string, details []string, payload proto.Message) { - e := err.(*barrierError) + e := err.(*barrierErr) enc := errbase.EncodeError(ctx, e.maskedErr) - return e.msg, e.SafeDetails(), &enc + return string(e.smsg), e.SafeDetails(), &enc } // A barrier error is decoded exactly. func decodeBarrier(ctx context.Context, msg string, _ []string, payload proto.Message) error { enc := payload.(*errbase.EncodedError) - return &barrierError{msg: msg, maskedErr: errbase.DecodeError(ctx, *enc)} + return &barrierErr{smsg: redact.RedactableString(msg), maskedErr: errbase.DecodeError(ctx, *enc)} } +// Previous versions of barrier errors. +func decodeBarrierPrev(ctx context.Context, msg string, _ []string, payload proto.Message) error { + enc := payload.(*errbase.EncodedError) + return &barrierErr{smsg: redact.Sprint(msg), maskedErr: errbase.DecodeError(ctx, *enc)} +} + +// barrierError is the "old" type name of barrierErr. We use a new +// name now to ensure a different decode function is used when +// importing barriers from the previous structure, where the +// message is not redactable. +type barrierError struct { + msg string + maskedErr error +} + +func (b *barrierError) Error() string { return "" } + func init() { - tn := errbase.GetTypeKey((*barrierError)(nil)) + errbase.RegisterLeafDecoder(errbase.GetTypeKey((*barrierError)(nil)), decodeBarrierPrev) + tn := errbase.GetTypeKey((*barrierErr)(nil)) errbase.RegisterLeafDecoder(tn, decodeBarrier) errbase.RegisterLeafEncoder(tn, encodeBarrier) } diff --git a/barriers/barriers_test.go b/barriers/barriers_test.go index c92a168..b559161 100644 --- a/barriers/barriers_test.go +++ b/barriers/barriers_test.go @@ -118,7 +118,7 @@ woo | woo | (1) woo | Error types: (1) *errors.errorString -Error types: (1) *barriers.barrierError`}, +Error types: (1) *barriers.barrierErr`}, {"handled + handled", barriers.Handled(barriers.Handled(goErr.New("woo"))), woo, ` woo @@ -130,8 +130,8 @@ woo | | woo | | (1) woo | | Error types: (1) *errors.errorString - | Error types: (1) *barriers.barrierError -Error types: (1) *barriers.barrierError`}, + | Error types: (1) *barriers.barrierErr +Error types: (1) *barriers.barrierErr`}, {"handledmsg", barriers.HandledWithMessage(goErr.New("woo"), "waa"), "waa", ` waa @@ -140,7 +140,7 @@ waa | woo | (1) woo | Error types: (1) *errors.errorString -Error types: (1) *barriers.barrierError`}, +Error types: (1) *barriers.barrierErr`}, {"handledmsg + handledmsg", barriers.HandledWithMessage( barriers.HandledWithMessage( @@ -154,8 +154,8 @@ wuu | | woo | | (1) woo | | Error types: (1) *errors.errorString - | Error types: (1) *barriers.barrierError -Error types: (1) *barriers.barrierError`}, + | Error types: (1) *barriers.barrierErr +Error types: (1) *barriers.barrierErr`}, {"handled + wrapper", barriers.Handled( @@ -172,7 +172,7 @@ waa: woo | | multi-line wrapper payload | Wraps: (2) woo | Error types: (1) *barriers_test.werrFmt (2) *errors.errorString -Error types: (1) *barriers.barrierError`}, +Error types: (1) *barriers.barrierErr`}, } for _, test := range testCases { diff --git a/barriers_api.go b/barriers_api.go index 6175711..feeb618 100644 --- a/barriers_api.go +++ b/barriers_api.go @@ -16,8 +16,19 @@ package errors import "github.com/cockroachdb/errors/barriers" -// Handled forwards a definition. +// Handled swallows the provided error and hides it from the +// Cause()/Unwrap() interface, and thus the Is() facility that +// identifies causes. However, it retains it for the purpose of +// printing the error out (e.g. for troubleshooting). The error +// message is preserved in full. +// +// Detail is shown: +// - via `errors.GetSafeDetails()`, shows details from hidden error. +// - when formatting with `%+v`. +// - in Sentry reports. func Handled(err error) error { return barriers.Handled(err) } -// HandledWithMessage forwards a definition. +// HandledWithMessage is like Handled except the message is overridden. +// This can be used e.g. to hide message details or to prevent +// downstream code to make assertions on the message's contents. func HandledWithMessage(err error, msg string) error { return barriers.HandledWithMessage(err, msg) } diff --git a/benchmark_test.go b/benchmark_test.go new file mode 100644 index 0000000..0c403fc --- /dev/null +++ b/benchmark_test.go @@ -0,0 +1,181 @@ +package errors_test + +import ( + "context" + "fmt" + "net" + "testing" + + "github.com/cockroachdb/errors" +) + +func BenchmarkErrorsIs(b *testing.B) { + b.Run("NilError", func(b *testing.B) { + var err error + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("SimpleError", func(b *testing.B) { + err := errors.New("test") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("WrappedError", func(b *testing.B) { + baseErr := errors.New("test") + err := errors.Wrap(baseErr, "wrapped error") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("WrappedWithStack", func(b *testing.B) { + baseErr := errors.New("test") + err := errors.WithStack(baseErr) + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("NetworkError", func(b *testing.B) { + netErr := &net.OpError{ + Op: "dial", + Net: "tcp", + Addr: &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 26257}, + Err: fmt.Errorf("connection refused"), + } + err := errors.Wrap(netErr, "network connection failed") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("DeeplyWrappedNetworkError", func(b *testing.B) { + netErr := &net.OpError{ + Op: "dial", + Net: "tcp", + Addr: &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 26257}, + Err: fmt.Errorf("connection refused"), + } + err := errors.WithStack(netErr) + err = errors.Wrap(err, "failed to connect to database") + err = errors.Wrap(err, "unable to establish connection") + err = errors.WithStack(err) + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("MultipleWrappedErrors", func(b *testing.B) { + baseErr := errors.New("internal error") + err := errors.WithStack(baseErr) + err = errors.Wrap(err, "operation failed") + err = errors.WithStack(err) + err = errors.Wrap(err, "transaction failed") + err = errors.WithStack(err) + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("NetworkErrorWithLongAddress", func(b *testing.B) { + netErr := &net.OpError{ + Op: "read", + Net: "tcp", + Addr: &net.TCPAddr{ + IP: net.ParseIP("2001:0db8:85a3:0000:0000:8a2e:0370:7334"), + Port: 26257, + }, + Err: fmt.Errorf("i/o timeout"), + } + err := errors.WithStack(netErr) + err = errors.Wrap(err, "failed to read from connection") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("WithMessage", func(b *testing.B) { + baseErr := errors.New("test") + err := errors.WithMessage(baseErr, "additional context") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("MultipleWithMessage", func(b *testing.B) { + baseErr := errors.New("internal error") + err := errors.WithMessage(baseErr, "first message") + err = errors.WithMessage(err, "second message") + err = errors.WithMessage(err, "third message") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("WithMessageAndStack", func(b *testing.B) { + baseErr := errors.New("test") + err := errors.WithStack(baseErr) + err = errors.WithMessage(err, "operation context") + err = errors.WithStack(err) + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("NetworkErrorWithMessage", func(b *testing.B) { + netErr := &net.OpError{ + Op: "dial", + Net: "tcp", + Addr: &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 26257}, + Err: fmt.Errorf("connection refused"), + } + err := errors.WithMessage(netErr, "database connection failed") + err = errors.WithMessage(err, "unable to reach server") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("NetworkErrorWithEverything", func(b *testing.B) { + netErr := &net.OpError{ + Op: "dial", + Net: "tcp", + Addr: &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 26257}, + Err: fmt.Errorf("connection refused"), + } + err := errors.WithStack(netErr) + err = errors.WithMessage(err, "database connection failed") + err = errors.Wrap(err, "failed to establish TCP connection") + err = errors.WithStack(err) + err = errors.WithMessage(err, "unable to reach CockroachDB server") + err = errors.Wrap(err, "connection attempt failed") + for range b.N { + errors.Is(err, context.Canceled) + } + }) + + b.Run("DeeplyNested100Levels", func(b *testing.B) { + baseErr := errors.New("base error") + err := baseErr + + // Create a 100-level deep error chain + for i := 0; i < 100; i++ { + switch i % 3 { + case 0: + err = errors.Wrap(err, fmt.Sprintf("wrap level %d", i)) + case 1: + err = errors.WithMessage(err, fmt.Sprintf("message level %d", i)) + case 2: + err = errors.WithStack(err) + } + } + + for range b.N { + errors.Is(err, context.Canceled) + } + }) +} diff --git a/contexttags/contexttags.go b/contexttags/contexttags.go index 6b520c7..60e1da9 100644 --- a/contexttags/contexttags.go +++ b/contexttags/contexttags.go @@ -18,14 +18,14 @@ import ( "context" "github.com/cockroachdb/errors/errbase" - "github.com/cockroachdb/errors/safedetails" "github.com/cockroachdb/logtags" + "github.com/cockroachdb/redact" ) // WithContextTags captures the k/v pairs stored in the context via the // `logtags` package and annotates them on the error. // -// Only the stromg representation of values remains available. This is +// Only the strong representation of values remains available. This is // because the library cannot guarantee that the underlying value is // preserved across the network. To avoid creating a stateful interface // (where the user code needs to know whether an error has traveled @@ -88,15 +88,26 @@ func convertToStringsOnly(b *logtags.Buffer) (res *logtags.Buffer) { func redactTags(b *logtags.Buffer) []string { res := make([]string, len(b.Get())) + redactableTagsIterate(b, func(i int, r redact.RedactableString) { + res[i] = r.Redact().StripMarkers() + }) + return res +} + +func redactableTagsIterate(b *logtags.Buffer, fn func(i int, s redact.RedactableString)) { + var empty redact.SafeString for i, t := range b.Get() { - res[i] = t.Key() + k := t.Key() v := t.Value() + eq := empty + var val interface{} = empty if v != nil { - if len(res[i]) > 1 { - res[i] += "=" + if len(k) > 1 { + eq = "=" } - res[i] += safedetails.Redact(v) + val = v } + res := redact.Sprintf("%s%s%v", redact.Safe(k), eq, val) + fn(i, res) } - return res } diff --git a/contexttags/contexttags_test.go b/contexttags/contexttags_test.go index 1201349..89411a8 100644 --- a/contexttags/contexttags_test.go +++ b/contexttags/contexttags_test.go @@ -27,6 +27,7 @@ import ( "github.com/cockroachdb/errors/markers" "github.com/cockroachdb/errors/testutils" "github.com/cockroachdb/logtags" + "github.com/cockroachdb/redact" ) func TestWithContext(t *testing.T) { @@ -87,7 +88,7 @@ func TestWithContext(t *testing.T) { tt.Run("remote", func(tt testutils.T) { theTest(tt, newErr) }) } -func TestTagRedaction(t *testing.T) { +func TestTagRedactionInSafeDetails(t *testing.T) { tt := testutils.T{T: t} // Create an example context with decoration. @@ -105,10 +106,13 @@ func TestTagRedaction(t *testing.T) { ctx2 = logtags.AddTag(ctx2, "planet1", "universe") ctx2 = logtags.AddTag(ctx2, "planet2", errors.Safe("universe")) - // This will be our reference expected value. + // rm is what's left over after redaction. + rm := string(redact.RedactableBytes(redact.RedactedMarker()).StripMarkers()) + + // This will be our reference expected value in "safe details" strings. refStrings := [][]string{ - []string{"planet1=", "planet2=universe"}, - []string{"foo1=", "x", "bar1", "foo2=123", "y456", "bar2"}, + []string{"planet1=" + rm, "planet2=universe"}, + []string{"foo1=" + rm, "x" + rm, "bar1", "foo2=123", "y456", "bar2"}, } // Construct the error object. diff --git a/contexttags/with_context.go b/contexttags/with_context.go index 3e88f02..f1e63c7 100644 --- a/contexttags/with_context.go +++ b/contexttags/with_context.go @@ -21,6 +21,7 @@ import ( "github.com/cockroachdb/errors/errbase" "github.com/cockroachdb/errors/errorspb" "github.com/cockroachdb/logtags" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) @@ -39,8 +40,8 @@ type withContext struct { var _ error = (*withContext)(nil) var _ errbase.SafeDetailer = (*withContext)(nil) +var _ errbase.SafeFormatter = (*withContext)(nil) var _ fmt.Formatter = (*withContext)(nil) -var _ errbase.Formatter = (*withContext)(nil) // withContext is an error. The original error message is preserved. func (w *withContext) Error() string { return w.cause.Error() } @@ -52,9 +53,16 @@ func (w *withContext) Unwrap() error { return w.cause } // Printing a withContext reveals the tags. func (w *withContext) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *withContext) FormatError(p errbase.Printer) error { - if w.tags != nil { - p.Printf("tags: [%s]", w.tags.String()) +func (w *withContext) SafeFormatError(p errbase.Printer) error { + if p.Detail() && w.tags != nil { + p.Printf("tags: [") + redactableTagsIterate(w.tags, func(i int, r redact.RedactableString) { + if i > 0 { + p.Printf(",") + } + p.Print(r) + }) + p.Printf("]") } return w.cause } diff --git a/contexttags_api.go b/contexttags_api.go index 51ac6ed..44f6fa4 100644 --- a/contexttags_api.go +++ b/contexttags_api.go @@ -21,10 +21,27 @@ import ( "github.com/cockroachdb/logtags" ) -// WithContextTags forwards a definition. +// WithContextTags captures the k/v pairs stored in the context via the +// `logtags` package and annotates them on the error. +// +// Only the strong representation of values remains available. This is +// because the library cannot guarantee that the underlying value is +// preserved across the network. To avoid creating a stateful interface +// (where the user code needs to know whether an error has traveled +// through the network or not), the library restricts access to the +// value part as strings. See GetContextTags() below. +// +// Detail is shown: +// - via `errors.GetSafeDetails()`. +// - via `GetContextTags()` below. +// - when formatting with `%+v`. +// - in Sentry reports. func WithContextTags(err error, ctx context.Context) error { return contexttags.WithContextTags(err, ctx) } -// GetContextTags forwards a definition. +// GetContextTags retrieves the k/v pairs stored in the error. +// The sets are returned from outermost to innermost level of cause. +// The returned logtags.Buffer only know about the string +// representation of the values originally captured by the error. func GetContextTags(err error) []*logtags.Buffer { return contexttags.GetContextTags(err) } diff --git a/domains/domains.go b/domains/domains.go index dbc5be8..a7b0dde 100644 --- a/domains/domains.go +++ b/domains/domains.go @@ -93,7 +93,7 @@ func HandledInDomainWithMessage(err error, domain Domain, msg string) error { // Handled creates a handled error in the implicit domain (see // PackageDomain() below) of its caller. // -// See the documentation of `errors.Handled()` for details. +// See the documentation of `barriers.Handled()` for details. func Handled(err error) error { return HandledInDomain(err, PackageDomainAtDepth(1)) } @@ -144,7 +144,7 @@ func PackageDomain() Domain { } // PackageDomainAtDepth returns an error domain that describes the -// package at the given depth. +// package at the given call depth. func PackageDomainAtDepth(depth int) Domain { _, f, _, _ := runtime.Caller(1 + depth) return Domain("error domain: pkg " + filepath.Dir(f)) diff --git a/domains/with_domain.go b/domains/with_domain.go index 9d80652..fbf24e3 100644 --- a/domains/with_domain.go +++ b/domains/with_domain.go @@ -19,6 +19,7 @@ import ( "fmt" "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) @@ -36,7 +37,7 @@ var _ error = (*withDomain)(nil) var _ errbase.SafeDetailer = (*withDomain)(nil) var _ errbase.TypeKeyMarker = (*withDomain)(nil) var _ fmt.Formatter = (*withDomain)(nil) -var _ errbase.Formatter = (*withDomain)(nil) +var _ errbase.SafeFormatter = (*withDomain)(nil) // withDomain is an error. The original error message is preserved. func (e *withDomain) Error() string { return e.cause.Error() } @@ -58,8 +59,10 @@ func (e *withDomain) SafeDetails() []string { func (e *withDomain) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *withDomain) FormatError(p errbase.Printer) error { - p.Print(e.domain) +func (e *withDomain) SafeFormatError(p errbase.Printer) error { + if p.Detail() { + p.Print(redact.Safe(e.domain)) + } return e.cause } diff --git a/domains_api.go b/domains_api.go index fea98f3..5e965e5 100644 --- a/domains_api.go +++ b/domains_api.go @@ -16,42 +16,63 @@ package errors import "github.com/cockroachdb/errors/domains" -// Domain forwards a definition. +// Domain is the type of a domain annotation. type Domain = domains.Domain -// NoDomain forwards a definition. +// NoDomain is the domain of errors that don't originate +// from a barrier. const NoDomain Domain = domains.NoDomain -// NamedDomain forwards a definition. +// NamedDomain returns an error domain identified by the given string. func NamedDomain(domainName string) Domain { return domains.NamedDomain(domainName) } -// PackageDomain forwards a definition. +// PackageDomain returns an error domain that represents the +// package of its caller. func PackageDomain() Domain { return domains.PackageDomainAtDepth(1) } -// PackageDomainAtDepth forwards a definition. +// PackageDomainAtDepth returns an error domain that describes the +// package at the given call depth. func PackageDomainAtDepth(depth int) Domain { return domains.PackageDomainAtDepth(depth) } -// WithDomain forwards a definition. +// WithDomain wraps an error so that it appears to come from the given domain. +// +// Domain is shown: +// - via `errors.GetSafeDetails()`. +// - when formatting with `%+v`. +// - in Sentry reports. func WithDomain(err error, domain Domain) error { return domains.WithDomain(err, domain) } -// NotInDomain forwards a definition. +// NotInDomain returns true if and only if the error's +// domain is not one of the specified domains. func NotInDomain(err error, doms ...Domain) bool { return domains.NotInDomain(err, doms...) } -// EnsureNotInDomain forwards a definition. +// EnsureNotInDomain checks whether the error is in the given domain(s). +// If it is, the given constructor if provided is called to construct +// an alternate error. If no error constructor is provided, +// a new barrier is constructed automatically using the first +// provided domain as new domain. The original error message +// is preserved. func EnsureNotInDomain(err error, constructor DomainOverrideFn, forbiddenDomains ...Domain) error { return domains.EnsureNotInDomain(err, constructor, forbiddenDomains...) } -// DomainOverrideFn forwards a definition. +// DomainOverrideFn is the type of the callback function passed to EnsureNotInDomain(). type DomainOverrideFn = func(originalDomain Domain, err error) error -// HandledInDomain forwards a definition. +// HandledInDomain creates an error in the given domain and retains +// the details of the given original error as context for +// debugging. The original error is hidden and does not become a +// "cause" for the new error. The original's error _message_ +// is preserved. +// +// See the documentation of `WithDomain()` and `errors.Handled()` for details. func HandledInDomain(err error, domain Domain) error { return domains.HandledInDomain(err, domain) } -// HandledInDomainWithMessage forwards a definition. +// HandledInDomainWithMessage is like HandledWithMessage but with a domain. func HandledInDomainWithMessage(err error, domain Domain, msg string) error { return domains.HandledInDomainWithMessage(err, domain, msg) } -// GetDomain forwards a definition. +// GetDomain extracts the domain of the given error, or NoDomain if +// the error's cause does not have a domain annotation. func GetDomain(err error) Domain { return domains.GetDomain(err) } diff --git a/errbase/adapters.go b/errbase/adapters.go index 3d2b261..8ad5c93 100644 --- a/errbase/adapters.go +++ b/errbase/adapters.go @@ -18,7 +18,9 @@ import ( "context" goErr "errors" "fmt" + "os" + "github.com/cockroachdb/errors/errorspb" "github.com/gogo/protobuf/proto" pkgErr "github.com/pkg/errors" ) @@ -35,6 +37,11 @@ func decodeErrorString(_ context.Context, msg string, _ []string, _ proto.Messag return goErr.New(msg) } +// context.DeadlineExceeded uses a custom type. +func decodeDeadlineExceeded(_ context.Context, _ string, _ []string, _ proto.Message) error { + return context.DeadlineExceeded +} + // errors.fundamental from github.com/pkg/errors cannot be encoded // exactly because it includes a non-serializable stack trace // object. In order to work with it, we encode it by dumping @@ -75,10 +82,114 @@ func encodePkgWithStack( return "" /* withStack does not have a message prefix */, safeDetails, nil } +func encodePathError( + _ context.Context, err error, +) (msgPrefix string, safe []string, details proto.Message) { + p := err.(*os.PathError) + msg := p.Op + " " + p.Path + details = &errorspb.StringsPayload{ + Details: []string{p.Op, p.Path}, + } + return msg, []string{p.Op}, details +} + +func decodePathError( + _ context.Context, cause error, _ string, _ []string, payload proto.Message, +) (result error) { + m, ok := payload.(*errorspb.StringsPayload) + if !ok || len(m.Details) < 2 { + // If this ever happens, this means some version of the library + // (presumably future) changed the payload type, and we're + // receiving this here. In this case, give up and let + // DecodeError use the opaque type. + return nil + } + return &os.PathError{ + Op: m.Details[0], + Path: m.Details[1], + Err: cause, + } +} + +func encodeLinkError( + _ context.Context, err error, +) (msgPrefix string, safe []string, details proto.Message) { + p := err.(*os.LinkError) + msg := p.Op + " " + p.Old + " " + p.New + details = &errorspb.StringsPayload{ + Details: []string{p.Op, p.Old, p.New}, + } + return msg, []string{p.Op}, details +} + +func decodeLinkError( + _ context.Context, cause error, _ string, _ []string, payload proto.Message, +) (result error) { + m, ok := payload.(*errorspb.StringsPayload) + if !ok || len(m.Details) < 3 { + // If this ever happens, this means some version of the library + // (presumably future) changed the payload type, and we're + // receiving this here. In this case, give up and let + // DecodeError use the opaque type. + return nil + } + return &os.LinkError{ + Op: m.Details[0], + Old: m.Details[1], + New: m.Details[2], + Err: cause, + } +} + +func encodeSyscallError( + _ context.Context, err error, +) (msgPrefix string, safe []string, details proto.Message) { + p := err.(*os.SyscallError) + return p.Syscall, nil, nil +} + +func decodeSyscallError( + _ context.Context, cause error, msg string, _ []string, _ proto.Message, +) (result error) { + return os.NewSyscallError(msg, cause) +} + +// OpaqueErrno represents a syscall.Errno error object that +// was constructed on a different OS/platform combination. +type OpaqueErrno struct { + msg string + details *errorspb.ErrnoPayload +} + +// Error implements the error interface. +func (o *OpaqueErrno) Error() string { return o.msg } + +// Is tests whether this opaque errno object represents a special os error type. +func (o *OpaqueErrno) Is(target error) bool { + return (target == os.ErrPermission && o.details.IsPermission) || + (target == os.ErrExist && o.details.IsExist) || + (target == os.ErrNotExist && o.details.IsNotExist) +} + +// Temporary tests whether this opaque errno object encodes a temporary error. +func (o *OpaqueErrno) Temporary() bool { return o.details.IsTemporary } + +// Timeout tests whether this opaque errno object encodes a timeout error. +func (o *OpaqueErrno) Timeout() bool { return o.details.IsTimeout } + +func encodeOpaqueErrno( + _ context.Context, err error, +) (msg string, safe []string, payload proto.Message) { + e := err.(*OpaqueErrno) + return e.Error(), []string{e.Error()}, e.details +} + func init() { baseErr := goErr.New("") RegisterLeafDecoder(GetTypeKey(baseErr), decodeErrorString) + RegisterLeafDecoder(GetTypeKey(context.DeadlineExceeded), decodeDeadlineExceeded) + pkgE := pkgErr.New("") RegisterLeafEncoder(GetTypeKey(pkgE), encodePkgFundamental) @@ -86,4 +197,18 @@ func init() { ws := pkgErr.WithStack(baseErr) RegisterWrapperEncoder(GetTypeKey(ws), encodePkgWithStack) + + registerOsPathErrorMigration() // Needed for Go 1.16. + pKey := GetTypeKey(&os.PathError{}) + RegisterWrapperEncoder(pKey, encodePathError) + RegisterWrapperDecoder(pKey, decodePathError) + + pKey = GetTypeKey(&os.LinkError{}) + RegisterWrapperEncoder(pKey, encodeLinkError) + RegisterWrapperDecoder(pKey, decodeLinkError) + pKey = GetTypeKey(&os.SyscallError{}) + RegisterWrapperEncoder(pKey, encodeSyscallError) + RegisterWrapperDecoder(pKey, decodeSyscallError) + + RegisterLeafEncoder(GetTypeKey(&OpaqueErrno{}), encodeOpaqueErrno) } diff --git a/errbase/adapters_errno.go b/errbase/adapters_errno.go new file mode 100644 index 0000000..0d238fe --- /dev/null +++ b/errbase/adapters_errno.go @@ -0,0 +1,66 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// +build !plan9 + +package errbase + +import ( + "context" + "os" + "runtime" + "syscall" + + "github.com/cockroachdb/errors/errorspb" + "github.com/gogo/protobuf/proto" +) + +const thisArch = runtime.GOOS + ":" + runtime.GOARCH + +func encodeErrno(_ context.Context, err error) (msg string, safe []string, payload proto.Message) { + e := err.(syscall.Errno) + payload = &errorspb.ErrnoPayload{ + OrigErrno: int64(e), + Arch: thisArch, + IsPermission: e.Is(os.ErrPermission), + IsExist: e.Is(os.ErrExist), + IsNotExist: e.Is(os.ErrNotExist), + IsTimeout: e.Timeout(), + IsTemporary: e.Temporary(), + } + return e.Error(), []string{e.Error()}, payload +} + +func decodeErrno(_ context.Context, msg string, _ []string, payload proto.Message) error { + m, ok := payload.(*errorspb.ErrnoPayload) + if !ok { + // If this ever happens, this means some version of the library + // (presumably future) changed the payload type, and we're + // receiving this here. In this case, give up and let + // DecodeError use the opaque type. + return nil + } + if m.Arch != thisArch { + // The errno object is coming from a different platform. We'll + // keep it opaque here. + return &OpaqueErrno{msg: msg, details: m} + } + return syscall.Errno(m.OrigErrno) +} + +func init() { + pKey := GetTypeKey(syscall.Errno(0)) + RegisterLeafEncoder(pKey, encodeErrno) + RegisterLeafDecoder(pKey, decodeErrno) +} diff --git a/errbase/adapters_errno_test.go b/errbase/adapters_errno_test.go new file mode 100644 index 0000000..0c79e51 --- /dev/null +++ b/errbase/adapters_errno_test.go @@ -0,0 +1,74 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// +build !plan9 + +package errbase_test + +import ( + "context" + "reflect" + "syscall" + "testing" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/errorspb" + "github.com/cockroachdb/errors/oserror" + "github.com/cockroachdb/errors/testutils" + "github.com/gogo/protobuf/types" +) + +func TestAdaptErrno(t *testing.T) { + tt := testutils.T{T: t} + + // Arbitrary values of errno on a given platform are preserved + // exactly when decoded on the same platform. + origErr := syscall.Errno(123) + newErr := network(t, origErr) + tt.Check(reflect.DeepEqual(newErr, origErr)) + + // Common values of errno preserve their properties + // across a network encode/decode even though they + // may not decode to the same type. + for i := 0; i < 2000; i++ { + origErr := syscall.Errno(i) + enc := errbase.EncodeError(context.Background(), origErr) + + // Trick the decoder into thinking the error comes from a different platform. + details := &enc.Error.(*errorspb.EncodedError_Leaf).Leaf.Details + var d types.DynamicAny + if err := types.UnmarshalAny(details.FullDetails, &d); err != nil { + t.Fatal(err) + } + errnoDetails := d.Message.(*errorspb.ErrnoPayload) + errnoDetails.Arch = "OTHER" + any, err := types.MarshalAny(errnoDetails) + if err != nil { + t.Fatal(err) + } + details.FullDetails = any + + // Now decode the error. This produces an OpaqueErrno payload. + dec := errbase.DecodeError(context.Background(), enc) + if _, ok := dec.(*errbase.OpaqueErrno); !ok { + t.Fatalf("expected OpaqueErrno, got %T", dec) + } + + // Now check that the properties have been preserved properly. + tt.CheckEqual(oserror.IsPermission(origErr), oserror.IsPermission(dec)) + tt.CheckEqual(oserror.IsExist(origErr), oserror.IsExist(dec)) + tt.CheckEqual(oserror.IsNotExist(origErr), oserror.IsNotExist(dec)) + tt.CheckEqual(oserror.IsTimeout(origErr), oserror.IsTimeout(dec)) + } +} diff --git a/errbase/adapters_test.go b/errbase/adapters_test.go index eff8aca..f80c0bf 100644 --- a/errbase/adapters_test.go +++ b/errbase/adapters_test.go @@ -18,6 +18,7 @@ import ( "context" goErr "errors" "fmt" + "os" "reflect" "strings" "testing" @@ -54,6 +55,44 @@ func TestAdaptBaseGoErr(t *testing.T) { tt.CheckDeepEqual(newErr, origErr) } +func TestAdaptGoSingleWrapErr(t *testing.T) { + origErr := fmt.Errorf("an error %w", goErr.New("hello")) + t.Logf("start err: %# v", pretty.Formatter(origErr)) + + newErr := network(t, origErr) + + tt := testutils.T{T: t} + // The library preserves the cause. It's not possible to preserve the fmt + // string. + tt.CheckEqual(newErr.Error(), origErr.Error()) + tt.CheckContains(newErr.Error(), "hello") +} + +func TestAdaptBaseGoJoinErr(t *testing.T) { + origErr := goErr.Join(goErr.New("hello"), goErr.New("world")) + t.Logf("start err: %# v", pretty.Formatter(origErr)) + + newErr := network(t, origErr) + + tt := testutils.T{T: t} + // The library preserves the error message. + tt.CheckEqual(newErr.Error(), origErr.Error()) + +} + +func TestAdaptGoMultiWrapErr(t *testing.T) { + origErr := fmt.Errorf("an error %w and also %w", goErr.New("hello"), goErr.New("world")) + t.Logf("start err: %# v", pretty.Formatter(origErr)) + + newErr := network(t, origErr) + + tt := testutils.T{T: t} + // The library preserves the causes. It's not possible to preserve the fmt string. + tt.CheckEqual(newErr.Error(), origErr.Error()) + tt.CheckContains(newErr.Error(), "hello") + tt.CheckContains(newErr.Error(), "world") +} + func TestAdaptPkgWithMessage(t *testing.T) { // Simple message wrappers from github.com/pkg/errors are preserved // completely. @@ -170,3 +209,30 @@ func TestAdaptProtoErrorsWithWrapper(t *testing.T) { // Moreover, it preserves the entire structure. tt.CheckDeepEqual(newErr, origErr) } + +func TestAdaptContextCanceled(t *testing.T) { + // context.DeadlineExceeded is preserved exactly. + + tt := testutils.T{T: t} + newErr := network(t, context.DeadlineExceeded) + tt.CheckEqual(newErr, context.DeadlineExceeded) +} + +func TestAdaptOsErrors(t *testing.T) { + // The special os error types are preserved exactly. + + tt := testutils.T{T: t} + var origErr error + + origErr = &os.PathError{Op: "hello", Path: "world", Err: goErr.New("woo")} + newErr := network(t, origErr) + tt.CheckDeepEqual(newErr, origErr) + + origErr = &os.LinkError{Op: "hello", Old: "world", New: "universe", Err: goErr.New("woo")} + newErr = network(t, origErr) + tt.CheckDeepEqual(newErr, origErr) + + origErr = &os.SyscallError{Syscall: "hello", Err: goErr.New("woo")} + newErr = network(t, origErr) + tt.CheckDeepEqual(newErr, origErr) +} diff --git a/errbase/decode.go b/errbase/decode.go index 832c3b6..59af230 100644 --- a/errbase/decode.go +++ b/errbase/decode.go @@ -23,6 +23,8 @@ import ( ) // DecodeError decodes an error. +// +// Can only be called if the EncodedError is set (see IsSet()). func DecodeError(ctx context.Context, enc EncodedError) error { if w := enc.GetWrapper(); w != nil { return decodeWrapper(ctx, w) @@ -55,6 +57,15 @@ func decodeLeaf(ctx context.Context, enc *errorspb.EncodedErrorLeaf) error { return genErr } // Decoding failed, we'll drop through to opaqueLeaf{} below. + } else if decoder, ok := multiCauseDecoders[typeKey]; ok { + causes := make([]error, len(enc.MultierrorCauses)) + for i, e := range enc.MultierrorCauses { + causes[i] = DecodeError(ctx, *e) + } + genErr := decoder(ctx, causes, enc.Message, enc.Details.ReportablePayload, payload) + if genErr != nil { + return genErr + } } else { // Shortcut for non-registered proto-encodable error types: // if it already implements `error`, it's good to go. @@ -64,6 +75,19 @@ func decodeLeaf(ctx context.Context, enc *errorspb.EncodedErrorLeaf) error { } } + if len(enc.MultierrorCauses) > 0 { + causes := make([]error, len(enc.MultierrorCauses)) + for i, e := range enc.MultierrorCauses { + causes[i] = DecodeError(ctx, *e) + } + leaf := &opaqueLeafCauses{ + causes: causes, + } + leaf.msg = enc.Message + leaf.details = enc.Details + return leaf + } + // No decoder and no error type: we'll keep what we received and // make it ready to re-encode exactly (if the error leaves over the // network again). @@ -95,7 +119,7 @@ func decodeWrapper(ctx context.Context, enc *errorspb.EncodedWrapper) error { typeKey := TypeKey(enc.Details.ErrorTypeMark.FamilyName) if decoder, ok := decoders[typeKey]; ok { // Yes, use it. - genErr := decoder(ctx, cause, enc.MessagePrefix, enc.Details.ReportablePayload, payload) + genErr := decoder(ctx, cause, enc.Message, enc.Details.ReportablePayload, payload) if genErr != nil { // Decoding succeeded. Use this. return genErr @@ -105,9 +129,10 @@ func decodeWrapper(ctx context.Context, enc *errorspb.EncodedWrapper) error { // Otherwise, preserve all details about the original object. return &opaqueWrapper{ - cause: cause, - prefix: enc.MessagePrefix, - details: enc.Details, + cause: cause, + prefix: enc.Message, + details: enc.Details, + messageType: MessageType(enc.MessageType), } } @@ -158,3 +183,24 @@ type WrapperDecoder = func(ctx context.Context, cause error, msgPrefix string, s // registry for RegisterWrapperType. var decoders = map[TypeKey]WrapperDecoder{} + +// MultiCauseDecoder is to be provided (via RegisterMultiCauseDecoder +// above) by additional multi-cause wrapper types not yet known by the +// library. A nil return indicates that decoding was not successful. +type MultiCauseDecoder = func(ctx context.Context, causes []error, msgPrefix string, safeDetails []string, payload proto.Message) error + +// registry for RegisterMultiCauseDecoder. +var multiCauseDecoders = map[TypeKey]MultiCauseDecoder{} + +// RegisterMultiCauseDecoder can be used to register new multi-cause +// wrapper types to the library. Registered wrappers will be decoded +// using their own Go type when an error is decoded. Multi-cause +// wrappers that have not been registered will be decoded using the +// opaqueWrapper type. +func RegisterMultiCauseDecoder(theType TypeKey, decoder MultiCauseDecoder) { + if decoder == nil { + delete(multiCauseDecoders, theType) + } else { + multiCauseDecoders[theType] = decoder + } +} diff --git a/errbase/encode.go b/errbase/encode.go index ca37de7..61ea0bb 100644 --- a/errbase/encode.go +++ b/errbase/encode.go @@ -33,18 +33,24 @@ func EncodeError(ctx context.Context, err error) EncodedError { if cause := UnwrapOnce(err); cause != nil { return encodeWrapper(ctx, err, cause) } - // Not a causer. - return encodeLeaf(ctx, err) + return encodeLeaf(ctx, err, UnwrapMulti(err)) } -// encodeLeaf encodes a leaf error. -func encodeLeaf(ctx context.Context, err error) EncodedError { +// encodeLeaf encodes a leaf error. This function accepts a `causes` +// argument because we encode multi-cause errors using the Leaf +// protobuf. This was done to enable backwards compatibility when +// introducing this functionality since the Wrapper type already has a +// required single `cause` field. +func encodeLeaf(ctx context.Context, err error, causes []error) EncodedError { var msg string var details errorspb.EncodedErrorDetails if e, ok := err.(*opaqueLeaf); ok { msg = e.msg details = e.details + } else if e, ok := err.(*opaqueLeafCauses); ok { + msg = e.msg + details = e.details } else { details.OriginalTypeName, details.ErrorTypeMark.FamilyName, details.ErrorTypeMark.Extension = getTypeDetails(err, false /*onlyFamily*/) @@ -74,11 +80,21 @@ func encodeLeaf(ctx context.Context, err error) EncodedError { details.FullDetails = encodeAsAny(ctx, err, payload) } + var cs []*EncodedError + if len(causes) > 0 { + cs = make([]*EncodedError, len(causes)) + for i, ee := range causes { + ee := EncodeError(ctx, ee) + cs[i] = &ee + } + } + return EncodedError{ Error: &errorspb.EncodedError_Leaf{ Leaf: &errorspb.EncodedErrorLeaf{ - Message: msg, - Details: details, + Message: msg, + Details: details, + MultierrorCauses: cs, }, }, } @@ -115,10 +131,18 @@ func encodeAsAny(ctx context.Context, err error, payload proto.Message) *types.A func encodeWrapper(ctx context.Context, err, cause error) EncodedError { var msg string var details errorspb.EncodedErrorDetails + messageType := Prefix if e, ok := err.(*opaqueWrapper); ok { + // We delegate all knowledge of the error string + // to the original encoder and do not try to re-engineer + // the prefix out of the error. This helps maintain + // backward compatibility with earlier versions of the + // encoder which don't have any understanding of + // error string ownership by the wrapper. msg = e.prefix details = e.details + messageType = e.messageType } else { details.OriginalTypeName, details.ErrorTypeMark.FamilyName, details.ErrorTypeMark.Extension = getTypeDetails(err, false /*onlyFamily*/) @@ -127,12 +151,12 @@ func encodeWrapper(ctx context.Context, err, cause error) EncodedError { // If we have a manually registered encoder, use that. typeKey := TypeKey(details.ErrorTypeMark.FamilyName) if enc, ok := encoders[typeKey]; ok { - msg, details.ReportablePayload, payload = enc(ctx, err) + msg, details.ReportablePayload, payload, messageType = enc(ctx, err) } else { // No encoder. // In that case, we'll try to compute a message prefix // manually. - msg = extractPrefix(err, cause) + msg, messageType = extractPrefix(err, cause) // If there are known safe details, use them. if s, ok := err.(SafeDetailer); ok { @@ -148,9 +172,10 @@ func encodeWrapper(ctx context.Context, err, cause error) EncodedError { return EncodedError{ Error: &errorspb.EncodedError_Wrapper{ Wrapper: &errorspb.EncodedWrapper{ - Cause: EncodeError(ctx, cause), - MessagePrefix: msg, - Details: details, + Cause: EncodeError(ctx, cause), + Message: msg, + Details: details, + MessageType: errorspb.MessageType(messageType), }, }, } @@ -158,21 +183,36 @@ func encodeWrapper(ctx context.Context, err, cause error) EncodedError { // extractPrefix extracts the prefix from a wrapper's error message. // For example, -// err := errors.New("bar") -// err = errors.Wrap(err, "foo") -// extractPrefix(err) +// +// err := errors.New("bar") +// err = errors.Wrap(err, "foo") +// extractPrefix(err) +// // returns "foo". -func extractPrefix(err, cause error) string { +// +// If a presumed wrapper does not have a message prefix, it is assumed +// to override the entire error message and `extractPrefix` returns +// the entire message and the boolean `true` to signify that the causes +// should not be appended to it. +func extractPrefix(err, cause error) (string, MessageType) { causeSuffix := cause.Error() errMsg := err.Error() if strings.HasSuffix(errMsg, causeSuffix) { prefix := errMsg[:len(errMsg)-len(causeSuffix)] + // If error msg matches exactly then this is a wrapper + // with no message of its own. + if len(prefix) == 0 { + return "", Prefix + } if strings.HasSuffix(prefix, ": ") { - return prefix[:len(prefix)-2] + return prefix[:len(prefix)-2], Prefix } } - return "" + // If we don't have the cause as a suffix, then we have + // some other string as our error msg, preserve that and + // mark as override + return errMsg, FullMessage } func getTypeDetails( @@ -183,6 +223,8 @@ func getTypeDetails( switch t := err.(type) { case *opaqueLeaf: return t.details.OriginalTypeName, t.details.ErrorTypeMark.FamilyName, t.details.ErrorTypeMark.Extension + case *opaqueLeafCauses: + return t.details.OriginalTypeName, t.details.ErrorTypeMark.FamilyName, t.details.ErrorTypeMark.Extension case *opaqueWrapper: return t.details.OriginalTypeName, t.details.ErrorTypeMark.FamilyName, t.details.ErrorTypeMark.Extension } @@ -211,6 +253,9 @@ func getTypeDetails( // TypeKeyMarker can be implemented by errors that wish to extend // their type name as seen by GetTypeKey(). +// +// Note: the key marker is considered safe for reporting and +// is included in sentry reports. type TypeKeyMarker interface { ErrorKeyMarker() string } @@ -260,6 +305,30 @@ func GetTypeMark(err error) errorspb.ErrorTypeMark { return errorspb.ErrorTypeMark{FamilyName: familyName, Extension: extension} } +// EqualTypeMark checks whether `GetTypeMark(e1).Equals(GetTypeMark(e2))`. It +// is written to be be optimized for the case where neither error has +// serialized type information. +func EqualTypeMark(e1, e2 error) bool { + slowPath := func(err error) bool { + switch err.(type) { + case *opaqueLeaf: + return true + case *opaqueLeafCauses: + return true + case *opaqueWrapper: + return true + case TypeKeyMarker: + return true + } + return false + } + if slowPath(e1) || slowPath(e2) { + return GetTypeMark(e1).Equals(GetTypeMark(e2)) + } + + return reflect.TypeOf(e1) == reflect.TypeOf(e2) +} + // RegisterLeafEncoder can be used to register new leaf error types to // the library. Registered types will be encoded using their own // Go type when an error is encoded. Wrappers that have not been @@ -283,6 +352,28 @@ type LeafEncoder = func(ctx context.Context, err error) (msg string, safeDetails // registry for RegisterLeafEncoder. var leafEncoders = map[TypeKey]LeafEncoder{} +// RegisterMultiCauseEncoder can be used to register new multi-cause +// error types to the library. Registered types will be encoded using +// their own Go type when an error is encoded. Multi-cause wrappers +// that have not been registered will be encoded using the +// opaqueWrapper type. +func RegisterMultiCauseEncoder(theType TypeKey, encoder MultiCauseEncoder) { + // This implementation is a simple wrapper around `LeafEncoder` + // because we implemented multi-cause error wrapper encoding into a + // `Leaf` instead of a `Wrapper` for smoother backwards + // compatibility support. Exposing this detail to consumers of the + // API is confusing and hence avoided. The causes of the error are + // encoded separately regardless of this encoder's implementation. + RegisterLeafEncoder(theType, encoder) +} + +// MultiCauseEncoder is to be provided (via RegisterMultiCauseEncoder +// above) by additional multi-cause wrapper types not yet known to this +// library. The encoder will automatically extract and encode the +// causes of this error by calling `Unwrap()` and expecting a slice of +// errors. +type MultiCauseEncoder = func(ctx context.Context, err error) (msg string, safeDetails []string, payload proto.Message) + // RegisterWrapperEncoder can be used to register new wrapper types to // the library. Registered wrappers will be encoded using their own // Go type when an error is encoded. Wrappers that have not been @@ -292,6 +383,33 @@ var leafEncoders = map[TypeKey]LeafEncoder{} // or a different type, ensure that RegisterTypeMigration() was called // prior to RegisterWrapperEncoder(). func RegisterWrapperEncoder(theType TypeKey, encoder WrapperEncoder) { + RegisterWrapperEncoderWithMessageType( + theType, + func(ctx context.Context, err error) ( + msgPrefix string, + safeDetails []string, + payload proto.Message, + messageType MessageType, + ) { + prefix, details, payload := encoder(ctx, err) + return prefix, details, payload, messageType + }) +} + +// RegisterWrapperEncoderWithMessageType can be used to register +// new wrapper types to the library. Registered wrappers will be +// encoded using their own Go type when an error is encoded. Wrappers +// that have not been registered will be encoded using the +// opaqueWrapper type. +// +// This function differs from RegisterWrapperEncoder by allowing the +// caller to explicitly decide whether the wrapper owns the entire +// error message or not. Otherwise, the relationship is inferred. +// +// Note: if the error type has been migrated from a previous location +// or a different type, ensure that RegisterTypeMigration() was called +// prior to RegisterWrapperEncoder(). +func RegisterWrapperEncoderWithMessageType(theType TypeKey, encoder WrapperEncoderWithMessageType) { if encoder == nil { delete(encoders, theType) } else { @@ -301,7 +419,42 @@ func RegisterWrapperEncoder(theType TypeKey, encoder WrapperEncoder) { // WrapperEncoder is to be provided (via RegisterWrapperEncoder above) // by additional wrapper types not yet known to this library. -type WrapperEncoder = func(ctx context.Context, err error) (msgPrefix string, safeDetails []string, payload proto.Message) +type WrapperEncoder func(ctx context.Context, err error) ( + msgPrefix string, + safeDetails []string, + payload proto.Message, +) + +// MessageType is used to encode information about an error message +// within a wrapper error type. This information is used to affect +// display logic. +type MessageType errorspb.MessageType + +// Values below should match the ones in errorspb.MessageType for +// direct conversion. +const ( + // Prefix denotes an error message that should be prepended to the + // message of its cause. + Prefix MessageType = MessageType(errorspb.MessageType_PREFIX) + // FullMessage denotes an error message that contains the text of its + // causes and can be displayed standalone. + FullMessage = MessageType(errorspb.MessageType_FULL_MESSAGE) +) + +// WrapperEncoderWithMessageType is to be provided (via +// RegisterWrapperEncoderWithMessageType above) by additional wrapper +// types not yet known to this library. This encoder returns an +// additional enum which indicates whether the wrapper owns the error +// message completely instead of simply being a prefix with the error +// message of its causes appended to it. This information is encoded +// along with the prefix in order to provide context during error +// display. +type WrapperEncoderWithMessageType func(ctx context.Context, err error) ( + msgPrefix string, + safeDetails []string, + payload proto.Message, + messageType MessageType, +) // registry for RegisterWrapperType. -var encoders = map[TypeKey]WrapperEncoder{} +var encoders = map[TypeKey]WrapperEncoderWithMessageType{} diff --git a/errbase/err_string_ownership_test.go b/errbase/err_string_ownership_test.go new file mode 100644 index 0000000..6399557 --- /dev/null +++ b/errbase/err_string_ownership_test.go @@ -0,0 +1,105 @@ +// Copyright 2023 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package errbase_test + +import ( + "context" + goErr "errors" + "fmt" + "testing" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/errorspb" + "github.com/cockroachdb/errors/testutils" +) + +func genEncoded(mt errorspb.MessageType) errorspb.EncodedError { + return errorspb.EncodedError{ + Error: &errorspb.EncodedError_Wrapper{ + Wrapper: &errorspb.EncodedWrapper{ + Cause: errorspb.EncodedError{ + Error: &errorspb.EncodedError_Leaf{ + Leaf: &errorspb.EncodedErrorLeaf{ + Message: "leaf-error-msg", + }, + }, + }, + Message: "wrapper-error-msg: leaf-error-msg: extra info", + Details: errorspb.EncodedErrorDetails{}, + MessageType: mt, + }, + }, + } +} + +func TestDecodeOldVersion(t *testing.T) { + tt := testutils.T{T: t} + + errOldEncoded := genEncoded(errorspb.MessageType_PREFIX) + errOldDecoded := errbase.DecodeError(context.Background(), errOldEncoded) + // Ensure that we will continue to just concat leaf after wrapper + // with older errors for backward compatibility. + tt.CheckEqual(errOldDecoded.Error(), "wrapper-error-msg: leaf-error-msg: extra info: leaf-error-msg") + + // Check to ensure that when flag is present, we interpret things correctly. + errNewEncoded := genEncoded(errorspb.MessageType_FULL_MESSAGE) + errNewDecoded := errbase.DecodeError(context.Background(), errNewEncoded) + tt.CheckEqual(errNewDecoded.Error(), "wrapper-error-msg: leaf-error-msg: extra info") +} + +func TestEncodeDecodeNewVersion(t *testing.T) { + tt := testutils.T{T: t} + errNewEncoded := errbase.EncodeError( + context.Background(), + fmt.Errorf( + "wrapper-error-msg: %w: extra info", + goErr.New("leaf-error-msg"), + ), + ) + + errNew := errorspb.EncodedError{ + Error: &errorspb.EncodedError_Wrapper{ + Wrapper: &errorspb.EncodedWrapper{ + Cause: errorspb.EncodedError{ + Error: &errorspb.EncodedError_Leaf{ + Leaf: &errorspb.EncodedErrorLeaf{ + Message: "leaf-error-msg", + Details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "errors/*errors.errorString", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName: "errors/*errors.errorString", Extension: ""}, + ReportablePayload: nil, + FullDetails: nil, + }, + }, + }, + }, + Message: "wrapper-error-msg: leaf-error-msg: extra info", + Details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName: "fmt/*fmt.wrapError", Extension: ""}, + ReportablePayload: nil, + FullDetails: nil, + }, + MessageType: errorspb.MessageType_FULL_MESSAGE, + }, + }, + } + + tt.CheckDeepEqual(errNewEncoded, errNew) + newErr := errbase.DecodeError(context.Background(), errNew) + + // New version correctly decodes error + tt.CheckEqual(newErr.Error(), "wrapper-error-msg: leaf-error-msg: extra info") +} diff --git a/errbase/format_error.go b/errbase/format_error.go index 9d09339..4b4602c 100644 --- a/errbase/format_error.go +++ b/errbase/format_error.go @@ -28,12 +28,16 @@ import ( "fmt" "io" "reflect" - "strconv" + "strings" + "github.com/cockroachdb/redact" + "github.com/kr/pretty" pkgErr "github.com/pkg/errors" ) // FormatError formats an error according to s and verb. +// This is a helper meant for use when implementing the fmt.Formatter +// interface on custom error objects. // // If the error implements errors.Formatter, FormatError calls its // FormatError method of f with an errors.Printer configured according @@ -44,16 +48,53 @@ import ( // // Otherwise, its Error() text is printed. func FormatError(err error, s fmt.State, verb rune) { + formatErrorInternal(err, s, verb, false /* redactableOutput */) +} + +// FormatRedactableError formats an error as a safe object. +// +// Note that certain verb/flags combinations are currently not +// supported, and result in a rendering that considers the entire +// object as unsafe. For example, %q, %#v are not yet supported. +func FormatRedactableError(err error, s redact.SafePrinter, verb rune) { + formatErrorInternal(err, s, verb, true /* redactable */) +} + +func init() { + // Also inform the redact package of how to print an error + // safely. This is used when an error is passed as argument + // to one of the redact print functions. + redact.RegisterRedactErrorFn(FormatRedactableError) +} + +// Formattable wraps an error into a fmt.Formatter which +// will provide "smart" formatting even if the outer layer +// of the error does not implement the Formatter interface. +func Formattable(err error) fmt.Formatter { + return &errorFormatter{err} +} + +// formatErrorInternal is the shared logic between FormatError +// and FormatErrorRedactable. +// +// When the redactableOutput argument is true, the fmt.State argument +// is really a redact.SafePrinter and casted down as necessary. +// +// If verb and flags are not one of the supported error formatting +// combinations (in particular, %q, %#v etc), then the redactableOutput +// argument is ignored. This limitation may be lifted in a later +// version. +func formatErrorInternal(err error, s fmt.State, verb rune, redactableOutput bool) { // Assuming this function is only called from the Format method, and given // that FormatError takes precedence over Format, it cannot be called from // any package that supports errors.Formatter. It is therefore safe to // disregard that State may be a specific printer implementation and use one // of our choice instead. - p := state{State: s} + p := state{State: s, redactableOutput: redactableOutput} switch { - case verb == 'v' && s.Flag('+'): + case verb == 'v' && s.Flag('+') && !s.Flag('#'): // Here we are going to format as per %+v, into p.buf. // // We need to start with the innermost (root cause) error first, @@ -61,7 +102,13 @@ func FormatError(err error, s fmt.State, verb rune) { // to enable stack trace de-duplication. This requires a // post-order traversal. Since we have a linked list, the best we // can do is a recursion. - p.formatRecursive(err, true /* isOutermost */) + p.formatRecursive( + err, + true, /* isOutermost */ + true, /* withDetail */ + false, /* withDepth */ + 0, /* depth */ + ) // We now have all the data, we can render the result. p.formatEntries(err) @@ -69,100 +116,306 @@ func FormatError(err error, s fmt.State, verb rune) { // We're done formatting. Apply width/precision parameters. p.finishDisplay(verb) - case verb == 'v' && s.Flag('#'): + case !redactableOutput && verb == 'v' && s.Flag('#'): + // We only know how to process %#v if redactable output is not + // requested. This is because the structured output may emit + // arbitrary unsafe strings without redaction markers, + // or improperly balanced/escaped redaction markers. if stringer, ok := err.(fmt.GoStringer); ok { - io.WriteString(&p.buf, stringer.GoString()) - p.finishDisplay(verb) - return + io.WriteString(&p.finalBuf, stringer.GoString()) + } else { + // Not a GoStringer: delegate to the pretty library. + fmt.Fprintf(&p.finalBuf, "%# v", pretty.Formatter(err)) } - // Not a stringer. Proceed as if it were %v. - fallthrough + p.finishDisplay(verb) - case verb == 's' || verb == 'q' || - verb == 'x' || verb == 'X' || verb == 'v': + case verb == 's' || + // We only handle %v/%+v or other combinations here; %#v is unsupported. + (verb == 'v' && !s.Flag('#')) || + // If redactable output is not requested, then we also + // know how to format %x/%X (print bytes of error message in hex) + // and %q (quote the result). + // If redactable output is requested, then we don't know + // how to perform these exotic verbs, because they + // may muck with the redaction markers. In this case, + // we simply refuse the format as per the default clause below. + (!redactableOutput && (verb == 'x' || verb == 'X' || verb == 'q')): // Only the error message. // // Use an intermediate buffer because there may be alignment // instructions to obey in the final rendering or // quotes to add (for %q). // - p.buf.WriteString(err.Error()) + // Conceptually, we could just do + // p.buf.WriteString(err.Error()) + // However we also advertise that Error() can be implemented + // by calling FormatError(), in which case we'd get an infinite + // recursion. So we have no choice but to peel the data + // and then assemble the pieces ourselves. + p.formatRecursive( + err, + true, /* isOutermost */ + false, /* withDetail */ + false, /* withDepth */ + 0, /* depth */ + ) + p.formatSingleLineOutput() p.finishDisplay(verb) default: // Unknown verb. Do like fmt.Printf and tell the user we're // confused. - p.buf.WriteString("%!") - p.buf.WriteRune(verb) - p.buf.WriteByte('(') + // + // Note that the following logic is correct regardless of the + // value of 'redactableOutput', because the display of the verb and type + // are always safe for redaction. If/when this code is changed to + // print more details, care is to be taken to add redaction + // markers if s.redactableOutput is set. + p.finalBuf.WriteString("%!") + p.finalBuf.WriteRune(verb) + p.finalBuf.WriteByte('(') switch { case err != nil: - p.buf.WriteString(reflect.TypeOf(err).String()) + p.finalBuf.WriteString(reflect.TypeOf(err).String()) default: - p.buf.WriteString("") + p.finalBuf.WriteString("") } - p.buf.WriteByte(')') - io.Copy(s, &p.buf) + p.finalBuf.WriteByte(')') + io.Copy(s, &p.finalBuf) } } -func needSpaceAtBeginning(buf []byte) bool { - return len(buf) > 0 && buf[0] != '\n' -} - +// formatEntries reads the entries from s.entries and produces a +// detailed rendering in s.finalBuf. +// +// Note that if s.redactableOutput is true, s.finalBuf is to contain a +// RedactableBytes. However, we are not using the helper facilities +// from redact.SafePrinter to do this, so care should be taken below +// to properly escape markers, etc. func (s *state) formatEntries(err error) { // The first entry at the top is special. We format it as follows: // // // (1)
- s.buf.WriteString(err.Error()) - s.buf.WriteString("\n(1)") - firstEntry := s.entries[len(s.entries)-1].buf - if needSpaceAtBeginning(firstEntry) { - s.buf.WriteByte(' ') - } - s.buf.Write(firstEntry) + s.formatSingleLineOutput() + s.finalBuf.WriteString("\n(1)") + + s.printEntry(s.entries[len(s.entries)-1]) // All the entries that follow are printed as follows: // // Wraps: (N)
// for i, j := len(s.entries)-2, 2; i >= 0; i, j = i-1, j+1 { - fmt.Fprintf(&s.buf, "\nWraps: (%d)", j) - thisEntry := s.entries[i].buf - if needSpaceAtBeginning(thisEntry) { - s.buf.WriteByte(' ') + s.finalBuf.WriteByte('\n') + // Extra indentation starts at depth==2 because the direct + // children of the root error area already printed on separate + // newlines. + for m := 0; m < s.entries[i].depth-1; m += 1 { + if m == s.entries[i].depth-2 { + s.finalBuf.WriteString("└─ ") + } else { + s.finalBuf.WriteByte(' ') + s.finalBuf.WriteByte(' ') + } } - s.buf.Write(thisEntry) + fmt.Fprintf(&s.finalBuf, "Wraps: (%d)", j) + entry := s.entries[i] + s.printEntry(entry) } // At the end, we link all the (N) references to the Go type of the // error. - s.buf.WriteString("\nError types:") + s.finalBuf.WriteString("\nError types:") for i, j := len(s.entries)-1, 1; i >= 0; i, j = i-1, j+1 { - fmt.Fprintf(&s.buf, " (%d) %T", j, s.entries[i].err) + fmt.Fprintf(&s.finalBuf, " (%d) %T", j, s.entries[i].err) } } -// formatRecursive performs a post-order traversal to -// prints errors from innermost to outermost. -func (s *state) formatRecursive(err error, isOutermost bool) { +// printEntry renders the entry given as argument +// into s.finalBuf. +// +// If s.redactableOutput is set, then s.finalBuf is to contain +// a RedactableBytes, with redaction markers. In that +// case, we must be careful to escape (or not) the entry +// depending on entry.redactable. +// +// If s.redactableOutput is unset, then we are not caring about +// redactability. In that case entry.redactable is not set +// anyway and we can pass contents through. +func (s *state) printEntry(entry formatEntry) { + if len(entry.head) > 0 { + if entry.head[0] != '\n' { + s.finalBuf.WriteByte(' ') + } + if len(entry.head) > 0 { + if !s.redactableOutput || entry.redactable { + // If we don't care about redaction, then we can pass the string + // through. + // + // If we do care about redaction, and entry.redactable is true, + // then entry.head is already a RedactableBytes. Then we can + // also pass it through. + s.finalBuf.Write(entry.head) + } else { + // We care about redaction, and the head is unsafe. Escape it + // and enclose the result within redaction markers. + s.finalBuf.Write([]byte(redact.EscapeBytes(entry.head))) + } + } + } + if len(entry.details) > 0 { + if len(entry.head) == 0 { + if entry.details[0] != '\n' { + s.finalBuf.WriteByte(' ') + } + } + if !s.redactableOutput || entry.redactable { + // If we don't care about redaction, then we can pass the string + // through. + // + // If we do care about redaction, and entry.redactable is true, + // then entry.details is already a RedactableBytes. Then we can + // also pass it through. + s.finalBuf.Write(entry.details) + } else { + // We care about redaction, and the details are unsafe. Escape + // them and enclose the result within redaction markers. + s.finalBuf.Write([]byte(redact.EscapeBytes(entry.details))) + } + } + if entry.stackTrace != nil { + s.finalBuf.WriteString("\n -- stack trace:") + s.finalBuf.WriteString(strings.ReplaceAll( + fmt.Sprintf("%+v", entry.stackTrace), + "\n", string(detailSep))) + if entry.elidedStackTrace { + fmt.Fprintf(&s.finalBuf, "%s[...repeated from below...]", detailSep) + } + } +} + +// formatSingleLineOutput prints the details extracted via +// formatRecursive() through the chain of errors as if .Error() has +// been called: it only prints the non-detail parts and prints them on +// one line with ": " separators. +// +// This function is used both when FormatError() is called indirectly +// from .Error(), e.g. in: +// +// (e *myType) Error() { return fmt.Sprintf("%v", e) } +// (e *myType) Format(s fmt.State, verb rune) { errors.FormatError(s, verb, e) } +// +// and also to print the first line in the output of a %+v format. +// +// It reads from s.entries and writes to s.finalBuf. +// s.buf is left untouched. +// +// Note that if s.redactableOutput is true, s.finalBuf is to contain a +// RedactableBytes. However, we are not using the helper facilities +// from redact.SafePrinter to do this, so care should be taken below +// to properly escape markers, etc. +func (s *state) formatSingleLineOutput() { + for i := len(s.entries) - 1; i >= 0; i-- { + entry := &s.entries[i] + if entry.elideShort { + continue + } + if s.finalBuf.Len() > 0 && len(entry.head) > 0 { + s.finalBuf.WriteString(": ") + } + if len(entry.head) == 0 { + // shortcut, to avoid the copy below. + continue + } + if !s.redactableOutput || entry.redactable { + // If we don't care about redaction, then we can pass the string + // through. + // + // If we do care about redaction, and entry.redactable is true, + // then entry.head is already a RedactableBytes. Then we can + // also pass it through. + s.finalBuf.Write(entry.head) + } else { + // We do care about redaction, but entry.redactable is unset. + // This means entry.head is unsafe. We need to escape it. + s.finalBuf.Write([]byte(redact.EscapeBytes(entry.head))) + } + } +} + +// formatRecursive performs a post-order traversal on the chain of +// errors to collect error details from innermost to outermost. +// +// It uses s.buf as an intermediate buffer to collect strings. +// It populates s.entries as a result. +// Between each layer of error, s.buf is reset. +// +// s.finalBuf is untouched. The conversion of s.entries +// to s.finalBuf is done by formatSingleLineOutput() and/or +// formatEntries(). +// +// `withDepth` and `depth` are used to tag subtrees of multi-cause +// errors for added indentation during printing. Once a multi-cause +// error is encountered, all subsequent calls with set `withDepth` to +// true, and increment `depth` during recursion. This information is +// persisted into the generated entries and used later to display the +// error with increased indentation based in the depth. +func (s *state) formatRecursive(err error, isOutermost, withDetail, withDepth bool, depth int) int { cause := UnwrapOnce(err) + numChildren := 0 if cause != nil { - // Recurse first. - s.formatRecursive(cause, false /*isOutermost*/) + // Recurse first, which populates entries list starting from innermost + // entry. If we've previously seen a multi-cause wrapper, `withDepth` + // will be true, and we'll record the depth below ensuring that extra + // indentation is applied to this inner cause during printing. + // Otherwise, we maintain "straight" vertical formatting by keeping the + // parent callers `withDepth` value of `false` by default. + numChildren += s.formatRecursive(cause, false, withDetail, withDepth, depth+1) } + causes := UnwrapMulti(err) + for _, c := range causes { + // Override `withDepth` to true for all child entries ensuring they have + // indentation applied during formatting to distinguish them from + // parents. + numChildren += s.formatRecursive(c, false, withDetail, true, depth+1) + } + // inserted := len(s.entries) - 1 - startChildren + + // Reinitialize the state for this stage of wrapping. + s.wantDetail = withDetail s.needSpace = false s.needNewline = 0 s.multiLine = false s.notEmpty = false + s.hasDetail = false + s.headBuf = nil seenTrace := false + bufIsRedactable := false + switch v := err.(type) { + case SafeFormatter: + bufIsRedactable = true + desiredShortening := v.SafeFormatError((*safePrinter)(s)) + if desiredShortening == nil { + // The error wants to elide the short messages from inner causes. + // Read backwards through list of entries up to the number of new + // entries created "under" this one amount and mark `elideShort` + // true. + s.elideShortChildren(numChildren) + } + case Formatter: - _ = v.FormatError((*printer)(s)) + desiredShortening := v.FormatError((*printer)(s)) + if desiredShortening == nil { + // The error wants to elide the short messages from inner + // causes. Do it. + s.elideShortChildren(numChildren) + } + case fmt.Formatter: // We can only use a fmt.Formatter when both the following // conditions are true: @@ -181,55 +434,181 @@ func (s *state) formatRecursive(err error, isOutermost bool) { s.lastStack = st.StackTrace() } } else { - s.formatSimple(err, cause) + if elideCauseMsg := s.formatSimple(err, cause); elideCauseMsg { + // The error wants to elide the short messages from inner + // causes. Do it. + s.elideShortChildren(numChildren) + } } + default: - // If the error did not implement errors.Formatter nor - // fmt.Formatter, but it is a wrapper, still attempt best effort: - // print what we can at this level. - s.formatSimple(err, cause) + // Handle the special case overrides for context.Canceled, + // os.PathError, etc for which we know how to extract some safe + // strings. + // + // We need to do this in the `default` branch, instead of doing + // this above the switch, because the special handler could call a + // .Error() that delegates its implementation to fmt.Formatter, + // errors.Safeformatter or errors.Formattable, which brings us + // back to this method in a call cycle. So we need to handle the + // various interfaces first. + printDone := false + for _, fn := range specialCases { + if handled, desiredShortening := fn(err, (*safePrinter)(s), cause == nil /* leaf */); handled { + printDone = true + bufIsRedactable = true + if desiredShortening == nil { + // The error wants to elide the short messages from inner + // causes. Do it. + s.elideShortChildren(numChildren) + } + break + } + } + if !printDone { + // If the error did not implement errors.Formatter nor + // fmt.Formatter, but it is a wrapper, still attempt best effort: + // print what we can at this level. + elideChildren := s.formatSimple(err, cause) + // always elideChildren when dealing with multi-cause errors. + if len(causes) > 0 { + elideChildren = true + } + if elideChildren { + // The error wants to elide the short messages from inner + // causes. Do it. + s.elideShortChildren(numChildren) + } + } } - // If there's an embedded stack trace, print it. + // Collect the result. + entry := s.collectEntry(err, bufIsRedactable, withDepth, depth) + + // If there's an embedded stack trace, also collect it. // This will get either a stack from pkg/errors, or ours. if !seenTrace { if st, ok := err.(StackTraceProvider); ok { - if s.multiLine { - s.Write([]byte("\n-- stack trace:")) - } - newStack, elided := ElideSharedStackTraceSuffix(s.lastStack, st.StackTrace()) - s.lastStack = newStack - newStack.Format(s, 'v') - if elided { - s.Write([]byte("\n[...repeated from below...]")) - } + entry.stackTrace, entry.elidedStackTrace = ElideSharedStackTraceSuffix(s.lastStack, st.StackTrace()) + s.lastStack = entry.stackTrace } } - s.entries = append(s.entries, formatEntry{err: err, buf: s.buf.Bytes()}) + // Remember the entry for later rendering. + s.entries = append(s.entries, entry) s.buf = bytes.Buffer{} + + return numChildren + 1 +} + +// elideShortChildren takes a number of entries to set `elideShort` to +// false. The reason a number of entries is needed is that we may be +// eliding a subtree of causes in the case of a multi-cause error. In +// the multi-cause case, we need to know how many of the prior errors +// in the list of entries is a child of this subtree. +func (s *state) elideShortChildren(newEntries int) { + for i := 0; i < newEntries; i++ { + s.entries[len(s.entries)-1-i].elideShort = true + } +} + +func (s *state) collectEntry(err error, bufIsRedactable bool, withDepth bool, depth int) formatEntry { + entry := formatEntry{err: err} + if s.wantDetail { + // The buffer has been populated as a result of formatting with + // %+v. In that case, if the printer has separated detail + // from non-detail, we can use the split. + if s.hasDetail { + entry.head = s.headBuf + entry.details = s.buf.Bytes() + } else { + entry.head = s.buf.Bytes() + } + } else { + entry.head = s.headBuf + if len(entry.head) > 0 && entry.head[len(entry.head)-1] != '\n' && + s.buf.Len() > 0 && s.buf.Bytes()[0] != '\n' { + entry.head = append(entry.head, '\n') + } + entry.head = append(entry.head, s.buf.Bytes()...) + } + + if bufIsRedactable { + // In this case, we've produced entry.head/entry.details using a + // SafeFormatError() invocation. The strings in + // entry.head/entry.detail contain redaction markers at this + // point. + if s.redactableOutput { + // Redaction markers desired in the final output. Keep the + // redaction markers. + entry.redactable = true + } else { + // Markers not desired in the final output: strip the markers. + entry.head = redact.RedactableBytes(entry.head).StripMarkers() + entry.details = redact.RedactableBytes(entry.details).StripMarkers() + } + } + + if withDepth { + entry.depth = depth + } + + return entry +} + +// safeErrorPrinterFn is the type of a function that can take +// over the safe printing of an error. This is used to inject special +// cases into the formatting in errutil. We need this machinery to +// prevent import cycles. +type safeErrorPrinterFn = func(err error, p Printer, isLeaf bool) (handled bool, next error) + +// specialCases is a list of functions to apply for special cases. +var specialCases []safeErrorPrinterFn + +// RegisterSpecialCasePrinter registers a handler. +func RegisterSpecialCasePrinter(fn safeErrorPrinterFn) { + specialCases = append(specialCases, fn) } -func (s *state) formatSimple(err, cause error) { +// formatSimple performs a best effort at extracting the details at a +// given level of wrapping when the error object does not implement +// the Formatter interface. +// Returns true if we want to elide errors from causal chain. +func (s *state) formatSimple(err, cause error) bool { var pref string + elideCauses := false if cause != nil { - pref = extractPrefix(err, cause) + var messageType MessageType + pref, messageType = extractPrefix(err, cause) + if messageType == FullMessage { + elideCauses = true + } } else { pref = err.Error() } if len(pref) > 0 { s.Write([]byte(pref)) } + return elideCauses } -// finishDisplay renders the buffer in state into the fmt.State. +// finishDisplay renders s.finalBuf into s.State. func (p *state) finishDisplay(verb rune) { + if p.redactableOutput { + // If we're rendering in redactable form, then s.finalBuf contains + // a RedactableBytes. We can emit that directly. + sp := p.State.(redact.SafePrinter) + sp.Print(redact.RedactableBytes(p.finalBuf.Bytes())) + return + } + // Not redactable: render depending on flags and verb. + width, okW := p.Width() - prec, okP := p.Precision() + _, okP := p.Precision() // If `direct` is set to false, then the buffer is always // passed through fmt.Printf regardless of the width and alignment - // settings. This is important or e.g. %q where quotes must be added + // settings. This is important for e.g. %q where quotes must be added // in any case. // If `direct` is set to true, then the detour via // fmt.Printf only occurs if there is a width or alignment @@ -237,28 +616,10 @@ func (p *state) finishDisplay(verb rune) { direct := verb == 'v' || verb == 's' if !direct || (okW && width > 0) || okP { - // Construct format string from State s. - format := []byte{'%'} - if p.Flag('-') { - format = append(format, '-') - } - if p.Flag('+') { - format = append(format, '+') - } - if p.Flag(' ') { - format = append(format, ' ') - } - if okW { - format = strconv.AppendInt(format, int64(width), 10) - } - if okP { - format = append(format, '.') - format = strconv.AppendInt(format, int64(prec), 10) - } - format = append(format, string(verb)...) - fmt.Fprintf(p.State, string(format), p.buf.String()) + _, format := redact.MakeFormat(p, verb) + fmt.Fprintf(p.State, format, p.finalBuf.String()) } else { - io.Copy(p.State, &p.buf) + io.Copy(p.State, &p.finalBuf) } } @@ -266,40 +627,201 @@ var detailSep = []byte("\n | ") // state tracks error printing state. It implements fmt.State. type state struct { + // state inherits fmt.State. + // + // If we are rendering with redactableOutput=true, then fmt.State + // can be downcasted to redact.SafePrinter. fmt.State - buf bytes.Buffer + + // redactableOutput indicates whether we want the output + // to use redaction markers. When set to true, + // the fmt.State above is actually a redact.SafePrinter. + redactableOutput bool + + // finalBuf contains the final rendered string, prior to being + // copied to the fmt.State above. + // + // If redactableOutput is true, then finalBuf contains a RedactableBytes + // and safe redaction markers. Otherwise, it can be considered + // an unsafe string. + finalBuf bytes.Buffer + + // entries collect the result of formatRecursive(). They are + // consumed by formatSingleLineOutput() and formatEntries() to + // produce the contents of finalBuf. entries []formatEntry - lastStack StackTrace - notEmpty bool - needSpace bool + // buf collects the details of the current error object at a given + // stage of recursion in formatRecursive(). + // + // At each stage of recursion (level of wrapping), buf contains + // successively: + // + // - at the beginning, the "simple" part of the error message -- + // either the pre-Detail() string if the error implements Formatter, + // or the result of Error(). + // + // - after the first call to Detail(), buf is copied to headBuf, + // then reset, then starts collecting the "advanced" part of the + // error message. + // + // At the end of an error layer, the contents of buf and headBuf + // are collected into a formatEntry by collectEntry(). + // This collection does not touch finalBuf above. + // + // The entries are later consumed by formatSingleLineOutput() or + // formatEntries() to produce the contents of finalBuf. + // + // + // Notes regarding redaction markers and string safety. Throughout a + // single "level" of error, there are three cases to consider: + // + // - the error level implements SafeErrorFormatter and + // s.redactableOutput is set. In that case, the error's + // SafeErrorFormat() is used to produce a RedactableBytes in + // buf/headBuf via safePrinter{}, and an entry is collected at the + // end of that with the redactable bit set on the entry. + // + // - the error level implements SafeErrorFormatter + // and s.redactableOutput is *not* set. In this case, + // for convenience we implement non-redactable output by using + // SafeErrorFormat() to generate a RedactableBytes into + // buf/headBuf via safePrinter{}, and then stripping the redaction + // markers to produce the entry. The entry is not marked as + // redactable. + // + // - in the remaining case (s.redactableOutput is not set or the + // error only implements Formatter), then we use FormatError() + // to produce a non-redactable string into buf/headBuf, + // and mark the resulting entry as non-redactable. + buf bytes.Buffer + // When an error's FormatError() calls Detail(), the current + // value of buf above is copied to headBuf, and a new + // buf is initialized. + headBuf []byte + + // lastStack tracks the last stack trace observed when looking at + // the errors from innermost to outermost. This is used to elide + // redundant stack trace entries. + lastStack StackTrace + + // --------------------------------------------------------------- + // The following attributes organize the synchronization of writes + // to buf and headBuf, during the rendering of a single error + // layer. They get reset between layers. + + // hasDetail becomes true at each level of the formatRecursive() + // recursion after the first call to .Detail(). It is used to + // determine how to translate buf/headBuf into a formatEntry. + hasDetail bool + + // wantDetail is set to true when the error is formatted via %+v. + // When false, printer.Detail() will always return false and the + // error's .FormatError() method can perform less work. (This is an + // optimization for the common case when an error's .Error() method + // delegates its work to its .FormatError() via fmt.Format and + // errors.FormatError().) + wantDetail bool + + // collectingRedactableString is true iff the data being accumulated + // into buf comes from a redact string. It ensures that newline + // characters are not included inside redaction markers. + collectingRedactableString bool + + // notEmpty tracks, at each level of recursion of formatRecursive(), + // whether there were any details printed by an error's + // .FormatError() method. It is used to properly determine whether + // the printout should start with a newline and padding. + notEmpty bool + // needSpace tracks whether the next character displayed should pad + // using a space character. + needSpace bool + // needNewline tracks whether the next character displayed should + // pad using a newline and indentation. needNewline int - multiLine bool + // multiLine tracks whether the details so far contain multiple + // lines. It is used to determine whether an enclosed stack trace, + // if any, should be introduced with a separator. + multiLine bool } +// formatEntry collects the textual details about one level of +// wrapping or the leaf error in an error chain. type formatEntry struct { err error - buf []byte + // redactable is true iff the data in head and details + // are RedactableBytes. See the explanatory comments + // on (state).buf for when this is set. + redactable bool + // head is the part of the text that is suitable for printing in the + // one-liner summary, or when producing the output of .Error(). + head []byte + // details is the part of the text produced in the advanced output + // included for `%+v` formats. + details []byte + // elideShort, if true, elides the value of 'head' from concatenated + // "short" messages produced by formatSingleLineOutput(). + elideShort bool + + // stackTrace, if non-nil, reports the stack trace embedded at this + // level of error. + stackTrace StackTrace + // elidedStackTrace, if true, indicates that the stack trace was + // truncated to avoid duplication of entries. This is used to + // display a truncation indicator during verbose rendering. + elidedStackTrace bool + + // depth, if positive, represents a nesting depth of this error as + // a causer of others. This is used with verbose printing to + // illustrate the nesting depth for multi-cause error wrappers. + depth int +} + +// String is used for debugging only. +func (e formatEntry) String() string { + return fmt.Sprintf("formatEntry{%T, %q, %q}", e.err, e.head, e.details) } +// Write implements io.Writer. func (s *state) Write(b []byte) (n int, err error) { if len(b) == 0 { return 0, nil } k := 0 + + sep := detailSep + if !s.wantDetail { + sep = []byte("\n") + } + for i, c := range b { if c == '\n' { + //if s.needNewline > 0 { + // for i := 0; i < s.needNewline-1; i++ { + // s.buf.Write(detailSep[:len(sep)-1]) + // } + // s.needNewline = 0 + //} + // Flush all the bytes seen so far. s.buf.Write(b[k:i]) + // Don't print the newline itself; instead, prepare the state so + // that the _next_ character encountered will pad with a newline. + // This algorithm avoids terminating error details with excess + // newline characters. k = i + 1 s.needNewline++ s.needSpace = false s.multiLine = true + if s.wantDetail { + s.switchOver() + } } else { if s.needNewline > 0 && s.notEmpty { + // If newline chars were pending, display them now. for i := 0; i < s.needNewline-1; i++ { - s.buf.Write(detailSep[:len(detailSep)-1]) + s.buf.Write(detailSep[:len(sep)-1]) } - s.buf.Write(detailSep) + s.buf.Write(sep) s.needNewline = 0 s.needSpace = false } else if s.needSpace { @@ -309,6 +831,11 @@ func (s *state) Write(b []byte) (n int, err error) { s.notEmpty = true } } + //if s.needNewline > 0 { + // for i := 0; i < s.needNewline-1; i++ { + // s.buf.Write(detailSep[:len(sep)-1]) + // } + //} s.buf.Write(b[k:]) return len(b), nil } @@ -316,12 +843,34 @@ func (s *state) Write(b []byte) (n int, err error) { // printer wraps a state to implement an xerrors.Printer. type printer state -func (s *printer) Detail() bool { - s.needNewline = 1 - s.notEmpty = false +func (p *state) detail() bool { + if !p.wantDetail { + return false + } + if p.notEmpty { + p.needNewline = 1 + } + p.switchOver() return true } +func (p *state) switchOver() { + if p.hasDetail { + return + } + p.headBuf = p.buf.Bytes() + p.buf = bytes.Buffer{} + p.notEmpty = false + p.hasDetail = true + + // One of the newlines is accounted for in the switch over. + // p.needNewline -= 1 +} + +func (s *printer) Detail() bool { + return ((*state)(s)).detail() +} + func (s *printer) Print(args ...interface{}) { s.enhanceArgs(args) fmt.Fprint((*state)(s), args...) @@ -347,11 +896,60 @@ func (s *printer) enhanceArgs(args []interface{}) { s.lastStack = lastSeen } +// safePrinter is a variant to printer used when the current error +// level implements SafeFormatter. +// +// In any case, it uses the error's SafeFormatError() method to +// prepare a RedactableBytes into s.buf / s.headBuf. +// The the explanation for `buf` in the state struct. +type safePrinter state + +func (s *safePrinter) Detail() bool { + return ((*state)(s)).detail() +} + +func (s *safePrinter) Print(args ...interface{}) { + s.enhanceArgs(args) + redact.Fprint((*state)(s), args...) +} + +func (s *safePrinter) Printf(format string, args ...interface{}) { + s.enhanceArgs(args) + redact.Fprintf((*state)(s), format, args...) +} + +func (s *safePrinter) enhanceArgs(args []interface{}) { + prevStack := s.lastStack + lastSeen := prevStack + for i := range args { + if st, ok := args[i].(pkgErr.StackTrace); ok { + thisStack, _ := ElideSharedStackTraceSuffix(prevStack, st) + // Stack traces are safe strings. + args[i] = redact.Safe(thisStack) + lastSeen = st + } + // In contrast with (*printer).enhanceArgs(), we don't use a + // special case for `error` here, because the redact package + // already helps us recursing into a safe print for + // error objects. + } + s.lastStack = lastSeen +} + type errorFormatter struct{ err error } // Format implements the fmt.Formatter interface. func (ef *errorFormatter) Format(s fmt.State, verb rune) { FormatError(ef.err, s, verb) } +// Error implements error, so that `redact` knows what to do with it. +func (ef *errorFormatter) Error() string { return ef.err.Error() } + +// Unwrap makes it a wrapper. +func (ef *errorFormatter) Unwrap() error { return ef.err } + +// Cause makes it a wrapper. +func (ef *errorFormatter) Cause() error { return ef.err } + // ElideSharedStackTraceSuffix removes the suffix of newStack that's already // present in prevStack. The function returns true if some entries // were elided. diff --git a/errbase/format_error_internal_test.go b/errbase/format_error_internal_test.go new file mode 100644 index 0000000..be00290 --- /dev/null +++ b/errbase/format_error_internal_test.go @@ -0,0 +1,454 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package errbase + +import ( + goErr "errors" + "fmt" + "strings" + "testing" + + "github.com/cockroachdb/redact" +) + +type wrapMini struct { + msg string + cause error +} + +func (e *wrapMini) Error() string { + return e.msg +} + +func (e *wrapMini) Unwrap() error { + return e.cause +} + +type wrapElideCauses struct { + override string + causes []error +} + +func NewWrapElideCauses(override string, errors ...error) error { + return &wrapElideCauses{ + override: override, + causes: errors, + } +} + +func (e *wrapElideCauses) Unwrap() []error { + return e.causes +} + +func (e *wrapElideCauses) SafeFormatError(p Printer) (next error) { + p.Print(e.override) + // Returning nil elides errors from remaining causal chain in the + // implementation of `formatErrorInternal`. + return nil +} + +var _ SafeFormatter = &wrapElideCauses{} + +func (e *wrapElideCauses) Error() string { + b := strings.Builder{} + b.WriteString(e.override) + b.WriteString(": ") + for i, ee := range e.causes { + b.WriteString(ee.Error()) + if i < len(e.causes)-1 { + b.WriteByte(' ') + } + } + return b.String() +} + +type wrapNoElideCauses struct { + prefix string + causes []error +} + +func NewWrapNoElideCauses(prefix string, errors ...error) error { + return &wrapNoElideCauses{ + prefix: prefix, + causes: errors, + } +} + +func (e *wrapNoElideCauses) Unwrap() []error { + return e.causes +} + +func (e *wrapNoElideCauses) SafeFormatError(p Printer) (next error) { + p.Print(e.prefix) + return e.causes[0] +} + +var _ SafeFormatter = &wrapNoElideCauses{} + +func (e *wrapNoElideCauses) Error() string { + b := strings.Builder{} + b.WriteString(e.prefix) + b.WriteString(": ") + for i, ee := range e.causes { + b.WriteString(ee.Error()) + if i < len(e.causes)-1 { + b.WriteByte(' ') + } + } + return b.String() +} + +// TestFormatErrorInternal attempts to highlight some idiosyncrasies of +// the error formatting especially when used with multi-cause error +// structures. Comments on specific cases below outline some gaps that +// still require formatting tweaks. +func TestFormatErrorInternal(t *testing.T) { + tests := []struct { + name string + err error + expectedSimple string + expectedVerbose string + }{ + { + name: "single wrapper", + err: fmt.Errorf("%w", fmt.Errorf("a%w", goErr.New("b"))), + expectedSimple: "ab", + expectedVerbose: `ab +(1) +Wraps: (2) ab +Wraps: (3) b +Error types: (1) *fmt.wrapError (2) *fmt.wrapError (3) *errors.errorString`, + }, + { + name: "simple multi-wrapper", + err: goErr.Join(goErr.New("a"), goErr.New("b")), + expectedSimple: "a\nb", + // TODO(davidh): verbose test case should have line break + // between `a` and `b` on second line. + expectedVerbose: `a +(1) ab +Wraps: (2) b +Wraps: (3) a +Error types: (1) *errors.joinError (2) *errors.errorString (3) *errors.errorString`, + }, + { + name: "multi-wrapper with custom formatter and partial elide", + err: NewWrapNoElideCauses("A", + NewWrapNoElideCauses("C", goErr.New("3"), goErr.New("4")), + NewWrapElideCauses("B", goErr.New("1"), goErr.New("2")), + ), + expectedSimple: `A: B: C: 4: 3`, // 1 and 2 omitted because they are elided. + expectedVerbose: `A: B: C: 4: 3 +(1) A +Wraps: (2) B +└─ Wraps: (3) 2 +└─ Wraps: (4) 1 +Wraps: (5) C +└─ Wraps: (6) 4 +└─ Wraps: (7) 3 +Error types: (1) *errbase.wrapNoElideCauses (2) *errbase.wrapElideCauses (3) *errors.errorString (4) *errors.errorString (5) *errbase.wrapNoElideCauses (6) *errors.errorString (7) *errors.errorString`, + }, + { + name: "multi-wrapper with custom formatter and no elide", + // All errors in this example omit eliding their children. + err: NewWrapNoElideCauses("A", + NewWrapNoElideCauses("B", goErr.New("1"), goErr.New("2")), + NewWrapNoElideCauses("C", goErr.New("3"), goErr.New("4")), + ), + expectedSimple: `A: C: 4: 3: B: 2: 1`, + expectedVerbose: `A: C: 4: 3: B: 2: 1 +(1) A +Wraps: (2) C +└─ Wraps: (3) 4 +└─ Wraps: (4) 3 +Wraps: (5) B +└─ Wraps: (6) 2 +└─ Wraps: (7) 1 +Error types: (1) *errbase.wrapNoElideCauses (2) *errbase.wrapNoElideCauses (3) *errors.errorString (4) *errors.errorString (5) *errbase.wrapNoElideCauses (6) *errors.errorString (7) *errors.errorString`, + }, + { + name: "simple multi-line error", + err: goErr.New("a\nb\nc\nd"), + expectedSimple: "a\nb\nc\nd", + // TODO(davidh): verbose test case should preserve all 3 + // linebreaks in original error. + expectedVerbose: `a +(1) ab + | + | c + | d +Error types: (1) *errors.errorString`, + }, + { + name: "two-level multi-wrapper", + err: goErr.Join( + goErr.Join(goErr.New("a"), goErr.New("b")), + goErr.Join(goErr.New("c"), goErr.New("d")), + ), + expectedSimple: "a\nb\nc\nd", + // TODO(davidh): verbose output should preserve line breaks after (1) + // and also after (2) and (5) in `c\nd` and `a\nb`. + expectedVerbose: `a +(1) ab + | + | c + | d +Wraps: (2) cd +└─ Wraps: (3) d +└─ Wraps: (4) c +Wraps: (5) ab +└─ Wraps: (6) b +└─ Wraps: (7) a +Error types: (1) *errors.joinError (2) *errors.joinError (3) *errors.errorString (4) *errors.errorString (5) *errors.joinError (6) *errors.errorString (7) *errors.errorString`, + }, + { + name: "simple multi-wrapper with single-cause chains inside", + err: goErr.Join( + fmt.Errorf("a%w", goErr.New("b")), + fmt.Errorf("c%w", goErr.New("d")), + ), + expectedSimple: "ab\ncd", + expectedVerbose: `ab +(1) ab + | cd +Wraps: (2) cd +└─ Wraps: (3) d +Wraps: (4) ab +└─ Wraps: (5) b +Error types: (1) *errors.joinError (2) *fmt.wrapError (3) *errors.errorString (4) *fmt.wrapError (5) *errors.errorString`, + }, + { + name: "multi-cause wrapper with single-cause chains inside", + err: goErr.Join( + fmt.Errorf("a%w", fmt.Errorf("b%w", fmt.Errorf("c%w", goErr.New("d")))), + fmt.Errorf("e%w", fmt.Errorf("f%w", fmt.Errorf("g%w", goErr.New("h")))), + ), + expectedSimple: `abcd +efgh`, + expectedVerbose: `abcd +(1) abcd + | efgh +Wraps: (2) efgh +└─ Wraps: (3) fgh + └─ Wraps: (4) gh + └─ Wraps: (5) h +Wraps: (6) abcd +└─ Wraps: (7) bcd + └─ Wraps: (8) cd + └─ Wraps: (9) d +Error types: (1) *errors.joinError (2) *fmt.wrapError (3) *fmt.wrapError (4) *fmt.wrapError (5) *errors.errorString (6) *fmt.wrapError (7) *fmt.wrapError (8) *fmt.wrapError (9) *errors.errorString`}, + { + name: "single cause chain with multi-cause wrapper inside with single-cause chains inside", + err: fmt.Errorf( + "prefix1: %w", + fmt.Errorf( + "prefix2: %w", + goErr.Join( + fmt.Errorf("a%w", fmt.Errorf("b%w", fmt.Errorf("c%w", goErr.New("d")))), + fmt.Errorf("e%w", fmt.Errorf("f%w", fmt.Errorf("g%w", goErr.New("h")))), + ))), + expectedSimple: `prefix1: prefix2: abcd +efgh`, + expectedVerbose: `prefix1: prefix2: abcd +(1) prefix1 +Wraps: (2) prefix2 +Wraps: (3) abcd + | efgh + └─ Wraps: (4) efgh + └─ Wraps: (5) fgh + └─ Wraps: (6) gh + └─ Wraps: (7) h + └─ Wraps: (8) abcd + └─ Wraps: (9) bcd + └─ Wraps: (10) cd + └─ Wraps: (11) d +Error types: (1) *fmt.wrapError (2) *fmt.wrapError (3) *errors.joinError (4) *fmt.wrapError (5) *fmt.wrapError (6) *fmt.wrapError (7) *errors.errorString (8) *fmt.wrapError (9) *fmt.wrapError (10) *fmt.wrapError (11) *errors.errorString`, + }, + { + name: "test wrapMini elides cause error string", + err: &wrapMini{"whoa: d", goErr.New("d")}, + expectedSimple: "whoa: d", + expectedVerbose: `whoa: d +(1) whoa +Wraps: (2) d +Error types: (1) *errbase.wrapMini (2) *errors.errorString`, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + fe := Formattable(tt.err) + s := fmt.Sprintf("%s", fe) + if s != tt.expectedSimple { + t.Errorf("\nexpected: \n%s\nbut got:\n%s\n", tt.expectedSimple, s) + } + s = fmt.Sprintf("%+v", fe) + if s != tt.expectedVerbose { + t.Errorf("\nexpected: \n%s\nbut got:\n%s\n", tt.expectedVerbose, s) + } + }) + } +} + +func TestPrintEntry(t *testing.T) { + b := func(s string) []byte { return []byte(s) } + + testCases := []struct { + entry formatEntry + exp string + }{ + {formatEntry{}, ""}, + {formatEntry{head: b("abc")}, " abc"}, + {formatEntry{head: b("abc\nxyz")}, " abc\nxyz"}, + {formatEntry{details: b("def")}, " def"}, + {formatEntry{details: b("def\nxyz")}, " def\nxyz"}, + {formatEntry{head: b("abc"), details: b("def")}, " abcdef"}, + {formatEntry{head: b("abc\nxyz"), details: b("def")}, " abc\nxyzdef"}, + {formatEntry{head: b("abc"), details: b("def\n | xyz")}, " abcdef\n | xyz"}, + {formatEntry{head: b("abc\nxyz"), details: b("def\n | xyz")}, " abc\nxyzdef\n | xyz"}, + } + + for _, tc := range testCases { + s := state{} + s.printEntry(tc.entry) + if s.finalBuf.String() != tc.exp { + t.Errorf("%s: expected %q, got %q", tc.entry, tc.exp, s.finalBuf.String()) + } + } +} + +func TestFormatSingleLineOutput(t *testing.T) { + b := func(s string) []byte { return []byte(s) } + testCases := []struct { + entries []formatEntry + exp string + }{ + {[]formatEntry{{}}, ``}, + {[]formatEntry{{head: b(`a`)}}, `a`}, + {[]formatEntry{{head: b(`a`)}, {head: b(`b`)}, {head: b(`c`)}}, `c: b: a`}, + {[]formatEntry{{}, {head: b(`b`)}}, `b`}, + {[]formatEntry{{head: b(`a`)}, {}}, `a`}, + {[]formatEntry{{head: b(`a`)}, {}, {head: b(`c`)}}, `c: a`}, + {[]formatEntry{{head: b(`a`), elideShort: true}, {head: b(`b`)}}, `b`}, + {[]formatEntry{{head: b("abc\ndef")}, {head: b("ghi\nklm")}}, "ghi\nklm: abc\ndef"}, + } + + for _, tc := range testCases { + s := state{entries: tc.entries} + s.formatSingleLineOutput() + if s.finalBuf.String() != tc.exp { + t.Errorf("%s: expected %q, got %q", tc.entries, tc.exp, s.finalBuf.String()) + } + } +} + +func TestPrintEntryRedactable(t *testing.T) { + sm := string(redact.StartMarker()) + em := string(redact.EndMarker()) + esc := string(redact.EscapeMarkers(redact.StartMarker())) + b := func(s string) []byte { return []byte(s) } + q := func(s string) string { return sm + s + em } + + testCases := []struct { + entry formatEntry + exp string + }{ + // If the entries are not redactable, they may contain arbitrary + // characters; they get enclosed in redaction markers in the final output. + {formatEntry{}, ""}, + {formatEntry{head: b("abc")}, " " + q("abc")}, + {formatEntry{head: b("abc\nxyz")}, " " + q("abc") + "\n" + q("xyz")}, + {formatEntry{details: b("def")}, " " + q("def")}, + {formatEntry{details: b("def\nxyz")}, " " + q("def") + "\n" + q("xyz")}, + {formatEntry{head: b("abc"), details: b("def")}, " " + q("abc") + q("def")}, + {formatEntry{head: b("abc\nxyz"), details: b("def")}, " " + q("abc") + "\n" + q("xyz") + q("def")}, + {formatEntry{head: b("abc"), details: b("def\n | xyz")}, " " + q("abc") + q("def") + "\n" + q(" | xyz")}, + {formatEntry{head: b("abc\nxyz"), details: b("def\n | xyz")}, " " + q("abc") + "\n" + q("xyz") + q("def") + "\n" + q(" | xyz")}, + // If there were markers in the entry, they get escaped in the output. + {formatEntry{head: b("abc" + em + sm), details: b("def" + em + sm)}, " " + q("abc"+esc+esc) + q("def"+esc+esc)}, + + // If the entries are redactable, then whatever characters they contain + // are assumed safe and copied as-is to the final output. + {formatEntry{redactable: true}, ""}, + {formatEntry{redactable: true, head: b("abc")}, " abc"}, + {formatEntry{redactable: true, head: b("abc\nxyz")}, " abc\nxyz"}, + {formatEntry{redactable: true, details: b("def")}, " def"}, + {formatEntry{redactable: true, details: b("def\nxyz")}, " def\nxyz"}, + {formatEntry{redactable: true, head: b("abc"), details: b("def")}, " abcdef"}, + {formatEntry{redactable: true, head: b("abc\nxyz"), details: b("def")}, " abc\nxyzdef"}, + {formatEntry{redactable: true, head: b("abc"), details: b("def\n | xyz")}, " abcdef\n | xyz"}, + {formatEntry{redactable: true, head: b("abc\nxyz"), details: b("def\n | xyz")}, " abc\nxyzdef\n | xyz"}, + // Entry already contains some markers. + {formatEntry{redactable: true, head: b("a " + q("bc")), details: b("d " + q("ef"))}, " a " + q("bc") + "d " + q("ef")}, + } + + for _, tc := range testCases { + s := state{redactableOutput: true} + s.printEntry(tc.entry) + if s.finalBuf.String() != tc.exp { + t.Errorf("%s: expected %q, got %q", tc.entry, tc.exp, s.finalBuf.String()) + } + } +} + +func TestFormatSingleLineOutputRedactable(t *testing.T) { + sm := string(redact.StartMarker()) + em := string(redact.EndMarker()) + // esc := string(redact.EscapeMarkers(redact.StartMarker())) + b := func(s string) []byte { return []byte(s) } + q := func(s string) string { return sm + s + em } + + testCases := []struct { + entries []formatEntry + exp string + }{ + // If the entries are not redactable, then whatever characters they contain + // get enclosed within redaction markers. + {[]formatEntry{{}}, ``}, + {[]formatEntry{{head: b(`a`)}}, q(`a`)}, + {[]formatEntry{{head: b(`a`)}, {head: b(`b`)}, {head: b(`c`)}}, q(`c`) + ": " + q(`b`) + ": " + q(`a`)}, + {[]formatEntry{{}, {head: b(`b`)}}, q(`b`)}, + {[]formatEntry{{head: b(`a`)}, {}}, q(`a`)}, + {[]formatEntry{{head: b(`a`)}, {}, {head: b(`c`)}}, q(`c`) + ": " + q(`a`)}, + {[]formatEntry{{head: b(`a`), elideShort: true}, {head: b(`b`)}}, q(`b`)}, + {[]formatEntry{{head: b("abc\ndef")}, {head: b("ghi\nklm")}}, q("ghi") + "\n" + q("klm") + ": " + q("abc") + "\n" + q("def")}, + + // If some entries are redactable but not others, then + // only those that are redactable are passed through. + {[]formatEntry{{redactable: true}}, ``}, + {[]formatEntry{{redactable: true, head: b(`a`)}}, `a`}, + {[]formatEntry{{redactable: true, head: b(`a`)}, {head: b(`b`)}, {redactable: true, head: b(`c`)}}, `c: ` + q(`b`) + `: a`}, + + {[]formatEntry{{redactable: true}, {head: b(`b`)}}, q(`b`)}, + {[]formatEntry{{}, {redactable: true, head: b(`b`)}}, `b`}, + {[]formatEntry{{redactable: true, head: b(`a`)}, {}}, `a`}, + {[]formatEntry{{head: b(`a`)}, {redactable: true}}, q(`a`)}, + + {[]formatEntry{{head: b(`a`)}, {}, {head: b(`c`)}}, q(`c`) + `: ` + q(`a`)}, + {[]formatEntry{{head: b(`a`)}, {redactable: true}, {head: b(`c`)}}, q(`c`) + `: ` + q(`a`)}, + {[]formatEntry{{head: b(`a`), elideShort: true, redactable: true}, {head: b(`b`)}}, q(`b`)}, + {[]formatEntry{{redactable: true, head: b("abc\ndef")}, {head: b("ghi\nklm")}}, q("ghi") + "\n" + q("klm") + ": abc\ndef"}, + {[]formatEntry{{head: b("abc\ndef")}, {redactable: true, head: b("ghi\nklm")}}, "ghi\nklm: " + q("abc") + "\n" + q("def")}, + // Entry already contains some markers. + {[]formatEntry{{redactable: true, head: b(`a` + q(" b"))}, {redactable: true, head: b(`c ` + q("d"))}}, `c ` + q(`d`) + `: a` + q(` b`)}, + } + + for _, tc := range testCases { + s := state{entries: tc.entries, redactableOutput: true} + s.formatSingleLineOutput() + if s.finalBuf.String() != tc.exp { + t.Errorf("%s: expected %q, got %q", tc.entries, tc.exp, s.finalBuf.String()) + } + } +} diff --git a/errbase/format_error_test.go b/errbase/format_error_test.go deleted file mode 100644 index 9050c11..0000000 --- a/errbase/format_error_test.go +++ /dev/null @@ -1,658 +0,0 @@ -// Copyright 2019 The Cockroach Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. - -package errbase_test - -import ( - "context" - goErr "errors" - "fmt" - "regexp" - "strings" - "testing" - - "github.com/cockroachdb/errors/errbase" - "github.com/cockroachdb/errors/testutils" - pkgErr "github.com/pkg/errors" -) - -func TestSimplifyStacks(t *testing.T) { - leaf := func() error { - return pkgErr.New("hello world") - } - wrapper := func() error { - err := leaf() - return pkgErr.WithStack(err) - } - errWrapper := wrapper() - t.Logf("error: %+v", errWrapper) - - t.Run("low level API", func(t *testing.T) { - tt := testutils.T{t} - // Extract the stack trace from the leaf. - errLeaf := errbase.UnwrapOnce(errWrapper) - leafP, ok := errLeaf.(errbase.StackTraceProvider) - if !ok { - t.Fatal("leaf error does not provide stack trace") - } - leafT := leafP.StackTrace() - spv := fmtClean(leafT) - t.Logf("-- leaf trace --%+v", spv) - if !strings.Contains(spv, "TestSimplifyStacks") { - t.Fatalf("expected test function in trace, got:%v", spv) - } - leafLines := strings.Split(spv, "\n") - - // Extract the stack trace from the wrapper. - wrapperP, ok := errWrapper.(errbase.StackTraceProvider) - if !ok { - t.Fatal("wrapper error does not provide stack trace") - } - wrapperT := wrapperP.StackTrace() - spv = fmtClean(wrapperT) - t.Logf("-- wrapper trace --%+v", spv) - wrapperLines := strings.Split(spv, "\n") - - // Sanity check before we verify the result. - tt.Check(len(wrapperLines) > 0) - tt.CheckDeepEqual(wrapperLines[3:], leafLines[5:]) - - // Elide the suffix and verify that we arrive to the same result. - simplified, hasElided := errbase.ElideSharedStackTraceSuffix(leafT, wrapperT) - spv = fmtClean(simplified) - t.Logf("-- simplified (%v) --%+v", hasElided, spv) - simplifiedLines := strings.Split(spv, "\n") - tt.CheckDeepEqual(simplifiedLines, wrapperLines[0:3]) - }) - - t.Run("high level API", func(t *testing.T) { - tt := testutils.T{t} - - spv := fmtClean(&errFormatter{errWrapper}) - tt.CheckStringEqual(spv, `hello world -(1) - | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks.func2 - | : - | [...repeated from below...] -Wraps: (2) hello world - | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks.func1 - | : - | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks.func2 - | : - | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks - | : - | testing.tRunner - | : - | runtime.goexit - | : -Error types: (1) *errors.withStack (2) *errors.fundamental`) - }) -} - -type errFormatter struct{ err error } - -func (f *errFormatter) Format(s fmt.State, verb rune) { errbase.FormatError(f.err, s, verb) } - -func TestFormat(t *testing.T) { - tt := testutils.T{t} - - ctx := context.Background() - const woo = `woo` - const waawoo = `waa: woo` - const wuuwaawoo = `wuu: waa: woo` - testCases := []struct { - name string - err error - expFmtSimple string - expFmtVerbose string - // We're expecting the result of printing an error with %q - // to be the quoted version of %s in the general case. - // However, the implementation of (*pkgErr.withMessage).Format() - // gets this wrong, so we need a separate ref string for this - // specific case. - expFmtQuote string - }{ - {"nofmt leaf", &errNoFmt{"woo"}, woo, woo, ``}, - - {"fmt-old leaf", - &errFmto{"woo"}, - woo, ` -woo --- this is woo's -multi-line payload`, ``, - }, - - {"fmt-partial leaf", - &errFmtp{"woo"}, - woo, ` -woo -(1) woo -Error types: (1) *errbase_test.errFmtp`, ``, - }, - - {"fmt leaf", - &errFmt{"woo"}, - woo, ` -woo -(1) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.errFmt`, ``, - }, - - {"nofmt leaf + nofmt wrap", - &werrNoFmt{&errNoFmt{"woo"}, "waa"}, - waawoo, waawoo, ``}, - - {"nofmt leaf + fmt-old wrap", - &werrFmto{&errNoFmt{"woo"}, "waa"}, - waawoo, ` -woo --- this is waa's -multi-line payload (fmt)`, ``, - }, - - {"nofmt leaf + fmt-partial wrap", - &werrFmtp{&errNoFmt{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa -Wraps: (2) woo -Error types: (1) *errbase_test.werrFmtp (2) *errbase_test.errNoFmt`, ``, - }, - - {"nofmt leaf + fmt wrap", - &werrFmt{&errNoFmt{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (2) woo -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.errNoFmt`, ``, - }, - - {"fmt-old leaf + nofmt wrap", - &werrNoFmt{&errFmto{"woo"}, "waa"}, - waawoo, waawoo, ``}, - - {"fmt-old leaf + fmt-old wrap", - &werrFmto{&errFmto{"woo"}, "waa"}, - waawoo, ` -woo --- this is woo's -multi-line payload --- this is waa's -multi-line payload (fmt)`, ``, - }, - - {"fmt-old leaf + fmt-partial wrap", - &werrFmtp{&errFmto{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa -Wraps: (2) woo - | -- this is woo's - | multi-line payload -Error types: (1) *errbase_test.werrFmtp (2) *errbase_test.errFmto`, ``, - }, - - {"fmt-old leaf + fmt wrap", - &werrFmt{&errFmto{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (2) woo - | -- this is woo's - | multi-line payload -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.errFmto`, ``, - }, - - {"fmt-partial leaf + nofmt wrap", - &werrNoFmt{&errFmtp{"woo"}, "waa"}, - waawoo, waawoo, ``}, - - {"fmt-partial leaf + fmt-old wrap", - &werrFmto{&errFmtp{"woo"}, "waa"}, - waawoo, ` -woo -(1) woo -Error types: (1) *errbase_test.errFmtp --- this is waa's -multi-line payload (fmt)`, ``, - }, - - {"fmt-partial leaf + fmt-partial wrap", - &werrFmtp{&errFmtp{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa -Wraps: (2) woo - | (1) woo - | Error types: (1) *errbase_test.errFmtp -Error types: (1) *errbase_test.werrFmtp (2) *errbase_test.errFmtp`, ``, - }, - - {"fmt-partial leaf + fmt wrap", - &werrFmt{&errFmtp{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (2) woo - | (1) woo - | Error types: (1) *errbase_test.errFmtp -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.errFmtp`, ``, - }, - - {"fmt leaf + nofmt wrap", - &werrNoFmt{&errFmt{"woo"}, "waa"}, - waawoo, waawoo, ``}, - - {"fmt leaf + fmt-old wrap", - &werrFmto{&errFmt{"woo"}, "waa"}, - waawoo, ` -woo -(1) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.errFmt --- this is waa's -multi-line payload (fmt)`, ``, - }, - - {"fmt leaf + fmt-partial wrap", - &werrFmtp{&errFmt{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa -Wraps: (2) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmtp (2) *errbase_test.errFmt`, ``, - }, - - {"fmt leaf + fmt wrap", - &werrFmt{&errFmt{"woo"}, "waa"}, - waawoo, ` -waa: woo -(1) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (2) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.errFmt`, ``, - }, - - {"nofmt wrap in + nofmt wrap out", - &werrNoFmt{&werrNoFmt{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, wuuwaawoo, ``}, - - {"nofmt wrap in + fmd-old wrap out", - &werrFmto{&werrNoFmt{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, ` -waa: woo --- this is wuu's -multi-line payload (fmt)`, ``, - }, - - {"nofmt wrap in + fmt wrap out", - &werrFmt{&werrNoFmt{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, ` -wuu: waa: woo -(1) wuu - | -- this is wuu's - | multi-line wrapper payload -Wraps: (2) waa -Wraps: (3) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.werrNoFmt (3) *errbase_test.errFmt`, ``, - }, - - {"fmt-old wrap in + nofmt wrap out", - &werrNoFmt{&werrFmto{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, wuuwaawoo, ``}, - - {"fmt-old wrap in + fmd-old wrap out", - &werrFmto{&werrFmto{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, ` -woo -(1) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.errFmt --- this is waa's -multi-line payload (fmt) --- this is wuu's -multi-line payload (fmt)`, ``, - }, - - {"fmt-old wrap in + fmt wrap out", - &werrFmt{&werrFmto{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, ` -wuu: waa: woo -(1) wuu - | -- this is wuu's - | multi-line wrapper payload -Wraps: (2) waa -Wraps: (3) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.werrFmto (3) *errbase_test.errFmt`, ``, - }, - - {"fmt wrap in + nofmt wrap out", - &werrNoFmt{&werrFmt{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, wuuwaawoo, ``}, - - {"fmt wrap in + fmd-old wrap out", - &werrFmto{&werrFmt{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, ` -waa: woo -(1) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (2) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.errFmt --- this is wuu's -multi-line payload (fmt)`, ``, - }, - - {"fmt wrap in + fmt wrap out", - &werrFmt{&werrFmt{&errFmt{"woo"}, "waa"}, "wuu"}, - wuuwaawoo, ` -wuu: waa: woo -(1) wuu - | -- this is wuu's - | multi-line wrapper payload -Wraps: (2) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (3) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errbase_test.werrFmt (3) *errbase_test.errFmt`, ``, - }, - - // Opaque leaf. - {"opaque leaf", - errbase.DecodeError(ctx, errbase.EncodeError(ctx, &errNoFmt{"woo"})), - woo, ` -woo -(1) woo - | - | (opaque error leaf) - | type name: github.com/cockroachdb/errors/errbase_test/*errbase_test.errNoFmt -Error types: (1) *errbase.opaqueLeaf`, ``}, - - // Opaque wrapper. - {"opaque wrapper", - errbase.DecodeError(ctx, errbase.EncodeError(ctx, &werrNoFmt{goErr.New("woo"), "waa"})), - waawoo, ` -waa: woo -(1) waa - | - | (opaque error wrapper) - | type name: github.com/cockroachdb/errors/errbase_test/*errbase_test.werrNoFmt -Wraps: (2) woo -Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString`, ``}, - - {"opaque wrapper+wrapper", - errbase.DecodeError(ctx, errbase.EncodeError(ctx, &werrNoFmt{&werrNoFmt{goErr.New("woo"), "waa"}, "wuu"})), - wuuwaawoo, ` -wuu: waa: woo -(1) wuu - | - | (opaque error wrapper) - | type name: github.com/cockroachdb/errors/errbase_test/*errbase_test.werrNoFmt -Wraps: (2) waa - | - | (opaque error wrapper) - | type name: github.com/cockroachdb/errors/errbase_test/*errbase_test.werrNoFmt -Wraps: (3) woo -Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errors.errorString`, ``}, - - // Compatibility with github.com/pkg/errors. - - {"pkg msg + fmt leaf", - pkgErr.WithMessage(&errFmt{"woo"}, "waa"), - waawoo, ` -woo -(1) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.errFmt -waa`, - // The implementation of (*pkgErr.withMessage).Format() is wrong for %q. Oh well... - `waa: woo`, - }, - - {"fmt wrap + pkg msg + fmt leaf", - &werrFmt{pkgErr.WithMessage(&errFmt{"woo"}, "waa"), "wuu"}, - wuuwaawoo, ` -wuu: waa: woo -(1) wuu - | -- this is wuu's - | multi-line wrapper payload -Wraps: (2) waa -Wraps: (3) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errors.withMessage (3) *errbase_test.errFmt`, ``, - }, - - {"fmt wrap + pkg msg1 + pkg.msg2 + fmt leaf", - &werrFmt{ - pkgErr.WithMessage( - pkgErr.WithMessage( - &errFmt{"woo"}, "waa2"), - "waa1"), - "wuu"}, - `wuu: waa1: waa2: woo`, ` -wuu: waa1: waa2: woo -(1) wuu - | -- this is wuu's - | multi-line wrapper payload -Wraps: (2) waa1 -Wraps: (3) waa2 -Wraps: (4) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errors.withMessage (3) *errors.withMessage (4) *errbase_test.errFmt`, ``, - }, - - {"fmt wrap + pkg stack + fmt leaf", - &werrFmt{pkgErr.WithStack(&errFmt{"woo"}), "waa"}, - waawoo, ` -waa: woo -(1) waa - | -- this is waa's - | multi-line wrapper payload -Wraps: (2) - | github.com/cockroachdb/errors/errbase_test.TestFormat - | : - | testing.tRunner - | : - | runtime.goexit - | : -Wraps: (3) woo - | -- this is woo's - | multi-line leaf payload -Error types: (1) *errbase_test.werrFmt (2) *errors.withStack (3) *errbase_test.errFmt`, ``, - }, - } - - for _, test := range testCases { - tt.Run(test.name, func(tt testutils.T) { - err := test.err - - // %s is simple formatting - tt.CheckStringEqual(fmt.Sprintf("%s", err), test.expFmtSimple) - - // %v is simple formatting too, for compatibility with the past. - tt.CheckStringEqual(fmt.Sprintf("%v", err), test.expFmtSimple) - - // %q is always like %s but quotes the result. - ref := test.expFmtQuote - if ref == "" { - ref = fmt.Sprintf("%q", test.expFmtSimple) - } - tt.CheckStringEqual(fmt.Sprintf("%q", err), ref) - - // %+v is the verbose mode. - refV := strings.TrimPrefix(test.expFmtVerbose, "\n") - spv := fmtClean(err) - tt.CheckStringEqual(spv, refV) - }) - } -} - -func fmtClean(x interface{}) string { - spv := fmt.Sprintf("%+v", x) - spv = fileref.ReplaceAllString(spv, ":") - spv = strings.ReplaceAll(spv, "\t", "") - return spv -} - -var fileref = regexp.MustCompile(`([a-zA-Z0-9\._/@-]*\.(?:go|s):\d+)`) - -// errNoFmt does neither implement Format() nor FormatError(). -type errNoFmt struct{ msg string } - -func (e *errNoFmt) Error() string { return e.msg } - -// werrNoFmt does like errNoFmt. This is used to check -// that FormatError() knows about "dumb" error wrappers. -type werrNoFmt struct { - cause error - msg string -} - -func (e *werrNoFmt) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } -func (e *werrNoFmt) Unwrap() error { return e.cause } - -// errFmto has just a Format() method that does everything, and does -// not know about neither FormatError() nor errors.Formatter. -// This is the "old style" support for formatting, e.g. used -// in github.com/pkg/errors. -type errFmto struct{ msg string } - -func (e *errFmto) Error() string { return e.msg } -func (e *errFmto) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - fmt.Fprint(s, e.msg) - fmt.Fprintf(s, "\n-- this is %s's\nmulti-line payload", e.msg) - return - } - fallthrough - case 's', 'q': - fmt.Fprintf(s, fmt.Sprintf("%%%s%c", flags(s), verb), e.msg) - } -} - -// werrFmto is like errFmto but is a wrapper. -type werrFmto struct { - cause error - msg string -} - -func (e *werrFmto) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } -func (e *werrFmto) Unwrap() error { return e.cause } -func (e *werrFmto) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - fmt.Fprintf(s, "%+v", e.cause) - fmt.Fprintf(s, "\n-- this is %s's\nmulti-line payload (fmt)", e.msg) - return - } - fallthrough - case 's', 'q': - fmt.Fprintf(s, fmt.Sprintf("%%%s%c", flags(s), verb), e.Error()) - } -} - -// errFmtp implements Format() that forwards to FormatError(), -// but does not implement errors.Formatter. It is used -// to check that FormatError() does the right thing. -type errFmtp struct { - msg string -} - -func (e *errFmtp) Error() string { return e.msg } -func (e *errFmtp) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } - -// werrFmtp is like errFmtp but is a wrapper. -type werrFmtp struct { - cause error - msg string -} - -func (e *werrFmtp) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } -func (e *werrFmtp) Unwrap() error { return e.cause } -func (e *werrFmtp) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } - -// errFmt has both Format() and FormatError(), -// and demonstrates the common case of "rich" errors. -type errFmt struct{ msg string } - -func (e *errFmt) Error() string { return e.msg } -func (e *errFmt) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *errFmt) FormatError(p errbase.Printer) error { - p.Print(e.msg) - if p.Detail() { - p.Printf("-- this is %s's\nmulti-line leaf payload", e.msg) - } - return nil -} - -// werrFmt is like errFmt but is a wrapper. -type werrFmt struct { - cause error - msg string -} - -func (e *werrFmt) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } -func (e *werrFmt) Unwrap() error { return e.cause } -func (e *werrFmt) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *werrFmt) FormatError(p errbase.Printer) error { - p.Print(e.msg) - if p.Detail() { - p.Printf("-- this is %s's\nmulti-line wrapper payload", e.msg) - } - return e.cause -} - -func flags(s fmt.State) string { - flags := "" - if s.Flag('#') { - flags += "#" - } - if s.Flag('+') { - flags += "+" - } - if s.Flag(' ') { - flags += " " - } - return flags -} diff --git a/errbase/formatter.go b/errbase/formatter.go index d4b1c43..6826242 100644 --- a/errbase/formatter.go +++ b/errbase/formatter.go @@ -22,14 +22,62 @@ package errbase // A Formatter formats error messages. +// +// NB: Consider implementing SafeFormatter instead. This will ensure +// that error displays can distinguish bits that are PII-safe. type Formatter interface { error - // FormatError prints the receiver's first error and returns the next error in - // the error chain, if any. + // FormatError prints the receiver's first error. + // The return value decides what happens in the case + // FormatError() is used to produce a "short" message, + // eg. when it is used to implement Error(): + // + // - if it returns nil, then the short message + // contains no more than that produced for this error, + // even if the error has a further causal chain. + // + // - if it returns non-nil, then the short message + // contains the value printed by this error, + // followed by that of its causal chain. + // (e.g. thiserror: itscause: furthercause) + // + // Note that all the causal chain is reported in verbose reports in + // any case. FormatError(p Printer) (next error) } +// SafeFormatter is implemented by error leaf or wrapper types that want +// to separate safe and non-safe information when printed out. +// +// When multiple errors are chained (e.g. via errors.Wrap), intermediate +// layers in the error that do not implement SafeError are considered +// “unsafe” +type SafeFormatter interface { + // SafeFormatError prints the receiver's first error. + // + // The provided Printer behaves like a redact.SafePrinter its + // Print() and Printf() methods conditionally add redaction markers + // around unsafe bits. + // + // The return value of SafeFormatError() decides what happens in the + // case the method is used to produce a "short" message, eg. when it + // is used to implement Error(): + // + // - if it returns nil, then the short message + // contains no more than that produced for this error, + // even if the error has a further causal chain. + // + // - if it returns non-nil, then the short message + // contains the value printed by this error, + // followed by that of its causal chain. + // (e.g. thiserror: itscause: furthercause) + // + // Note that all the causal chain is reported in verbose reports in + // any case. + SafeFormatError(p Printer) (next error) +} + // A Printer formats error messages. // // The most common implementation of Printer is the one provided by package fmt diff --git a/errbase/internal/unknown.pb.go b/errbase/internal/unknown.pb.go index 05ed571..753d71d 100644 --- a/errbase/internal/unknown.pb.go +++ b/errbase/internal/unknown.pb.go @@ -1,13 +1,15 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: errors/errbase/internal/unknown.proto +// source: errbase/internal/unknown.proto package internal -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import io "io" +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -18,33 +20,31 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type MyPayload struct { - Val int32 `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Val int32 `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"` } func (m *MyPayload) Reset() { *m = MyPayload{} } func (m *MyPayload) String() string { return proto.CompactTextString(m) } func (*MyPayload) ProtoMessage() {} func (*MyPayload) Descriptor() ([]byte, []int) { - return fileDescriptor_unknown_4a6237e227c7531d, []int{0} + return fileDescriptor_bba822a4a2c59a28, []int{0} } func (m *MyPayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *MyPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } -func (dst *MyPayload) XXX_Merge(src proto.Message) { - xxx_messageInfo_MyPayload.Merge(dst, src) +func (m *MyPayload) XXX_Merge(src proto.Message) { + xxx_messageInfo_MyPayload.Merge(m, src) } func (m *MyPayload) XXX_Size() int { return m.Size() @@ -58,10 +58,27 @@ var xxx_messageInfo_MyPayload proto.InternalMessageInfo func init() { proto.RegisterType((*MyPayload)(nil), "cockroach.errors.errbase.internal.MyPayload") } + +func init() { proto.RegisterFile("errbase/internal/unknown.proto", fileDescriptor_bba822a4a2c59a28) } + +var fileDescriptor_bba822a4a2c59a28 = []byte{ + // 154 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0x2d, 0x2a, 0x4a, + 0x4a, 0x2c, 0x4e, 0xd5, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0xcd, 0xcb, + 0xce, 0xcb, 0x2f, 0xcf, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x52, 0x4c, 0xce, 0x4f, 0xce, + 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x4b, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0xd6, 0x83, 0x6a, 0xd0, + 0x83, 0x69, 0x50, 0x92, 0xe5, 0xe2, 0xf4, 0xad, 0x0c, 0x48, 0xac, 0xcc, 0xc9, 0x4f, 0x4c, 0x11, + 0x12, 0xe0, 0x62, 0x2e, 0x4b, 0xcc, 0x91, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, 0x02, 0x31, 0x9d, + 0xb4, 0x4e, 0x3c, 0x94, 0x63, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x1b, 0x8f, + 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, + 0x8f, 0xe5, 0x18, 0xa2, 0x38, 0x60, 0x46, 0x25, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, + 0xff, 0xff, 0x64, 0x6f, 0xf2, 0xc7, 0x96, 0x00, 0x00, 0x00, +} + func (m *MyPayload) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -69,26 +86,33 @@ func (m *MyPayload) Marshal() (dAtA []byte, err error) { } func (m *MyPayload) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MyPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Val != 0 { - dAtA[i] = 0x8 - i++ i = encodeVarintUnknown(dAtA, i, uint64(m.Val)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func encodeVarintUnknown(dAtA []byte, offset int, v uint64) int { + offset -= sovUnknown(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *MyPayload) Size() (n int) { if m == nil { @@ -103,14 +127,7 @@ func (m *MyPayload) Size() (n int) { } func sovUnknown(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozUnknown(x uint64) (n int) { return sovUnknown(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -130,7 +147,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -158,7 +175,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Val |= (int32(b) & 0x7F) << shift + m.Val |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -169,7 +186,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthUnknown } if (iNdEx + skippy) > l { @@ -187,6 +204,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { func skipUnknown(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -218,10 +236,8 @@ func skipUnknown(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -238,71 +254,34 @@ func skipUnknown(dAtA []byte) (n int, err error) { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthUnknown } - return iNdEx, nil + iNdEx += length case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowUnknown - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipUnknown(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupUnknown + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthUnknown + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthUnknown = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowUnknown = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthUnknown = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowUnknown = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupUnknown = fmt.Errorf("proto: unexpected end of group") ) - -func init() { - proto.RegisterFile("errors/errbase/internal/unknown.proto", fileDescriptor_unknown_4a6237e227c7531d) -} - -var fileDescriptor_unknown_4a6237e227c7531d = []byte{ - // 149 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0x2d, 0x2a, 0xca, - 0x2f, 0x2a, 0xd6, 0x4f, 0x2d, 0x2a, 0x4a, 0x4a, 0x2c, 0x4e, 0xd5, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, - 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0xcd, 0xcb, 0xce, 0xcb, 0x2f, 0xcf, 0xd3, 0x2b, 0x28, 0xca, 0x2f, - 0xc9, 0x17, 0x52, 0x4c, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x83, 0x68, 0xd0, - 0x83, 0x6a, 0xd0, 0x83, 0x69, 0x50, 0x92, 0xe5, 0xe2, 0xf4, 0xad, 0x0c, 0x48, 0xac, 0xcc, 0xc9, - 0x4f, 0x4c, 0x11, 0x12, 0xe0, 0x62, 0x2e, 0x4b, 0xcc, 0x91, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, - 0x02, 0x31, 0x9d, 0x94, 0x4e, 0x3c, 0x94, 0x63, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, - 0xc6, 0x1b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0x21, 0x8a, 0x03, - 0x66, 0x44, 0x12, 0x1b, 0xd8, 0x32, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xe4, 0xda, - 0x7c, 0x95, 0x00, 0x00, 0x00, -} diff --git a/errbase/opaque.go b/errbase/opaque.go index 56ddfaf..cd9b38a 100644 --- a/errbase/opaque.go +++ b/errbase/opaque.go @@ -18,6 +18,7 @@ import ( "fmt" "github.com/cockroachdb/errors/errorspb" + "github.com/cockroachdb/redact" ) // opaqueLeaf is used when receiving an unknown leaf type. @@ -29,29 +30,52 @@ type opaqueLeaf struct { details errorspb.EncodedErrorDetails } +// opaqueLeafCauses is used when receiving an unknown multi-cause +// wrapper type. Its important property is that if it is communicated +// back to some network system that _does_ know about the type, the +// original object can be restored. We encode multi-cause errors as +// leaf nodes over the network, in order to support backwards +// compatibility with existing single-cause wrapper messages. +// +// This struct *must* be initialized with a non-nil causes value in +// order to comply with go stdlib expectations for `Unwrap()`. +type opaqueLeafCauses struct { + opaqueLeaf + causes []error +} + var _ error = (*opaqueLeaf)(nil) var _ SafeDetailer = (*opaqueLeaf)(nil) var _ fmt.Formatter = (*opaqueLeaf)(nil) -var _ Formatter = (*opaqueLeaf)(nil) +var _ SafeFormatter = (*opaqueLeaf)(nil) + +var _ error = (*opaqueLeafCauses)(nil) +var _ SafeDetailer = (*opaqueLeafCauses)(nil) +var _ fmt.Formatter = (*opaqueLeafCauses)(nil) +var _ SafeFormatter = (*opaqueLeafCauses)(nil) // opaqueWrapper is used when receiving an unknown wrapper type. // Its important property is that if it is communicated // back to some network system that _does_ know about // the type, the original object can be restored. type opaqueWrapper struct { - cause error - prefix string - details errorspb.EncodedErrorDetails + cause error + prefix string + details errorspb.EncodedErrorDetails + messageType MessageType } var _ error = (*opaqueWrapper)(nil) var _ SafeDetailer = (*opaqueWrapper)(nil) var _ fmt.Formatter = (*opaqueWrapper)(nil) -var _ Formatter = (*opaqueWrapper)(nil) +var _ SafeFormatter = (*opaqueWrapper)(nil) func (e *opaqueLeaf) Error() string { return e.msg } func (e *opaqueWrapper) Error() string { + if e.messageType == FullMessage { + return e.prefix + } if e.prefix == "" { return e.cause.Error() } @@ -65,35 +89,49 @@ func (e *opaqueWrapper) Unwrap() error { return e.cause } func (e *opaqueLeaf) SafeDetails() []string { return e.details.ReportablePayload } func (e *opaqueWrapper) SafeDetails() []string { return e.details.ReportablePayload } -func (e *opaqueLeaf) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } -func (e *opaqueWrapper) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } +func (e *opaqueLeaf) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } +func (e *opaqueLeafCauses) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } +func (e *opaqueWrapper) Format(s fmt.State, verb rune) { FormatError(e, s, verb) } + +// opaqueLeafCauses is a multi-cause wrapper +func (e *opaqueLeafCauses) Unwrap() []error { return e.causes } -func (e *opaqueLeaf) FormatError(p Printer) (next error) { +func (e *opaqueLeaf) SafeFormatError(p Printer) (next error) { p.Print(e.msg) if p.Detail() { - p.Print("\n(opaque error leaf)") - p.Printf("\ntype name: %s", e.details.OriginalTypeName) + p.Printf("\n(opaque error leaf)") + p.Printf("\ntype name: %s", redact.Safe(e.details.OriginalTypeName)) for i, d := range e.details.ReportablePayload { - p.Printf("\nreportable %d:\n%s", i, d) + p.Printf("\nreportable %d:\n%s", redact.Safe(i), redact.Safe(d)) } if e.details.FullDetails != nil { - p.Printf("\npayload type: %s", e.details.FullDetails.TypeUrl) + p.Printf("\npayload type: %s", redact.Safe(e.details.FullDetails.TypeUrl)) } } return nil } -func (e *opaqueWrapper) FormatError(p Printer) (next error) { - p.Print(e.prefix) +func (e *opaqueWrapper) SafeFormatError(p Printer) (next error) { + if len(e.prefix) > 0 { + // We use the condition if len(msg) > 0 because + // otherwise an empty string would cause a "redactable + // empty string" to be emitted (something that looks like "<>") + // and the error formatting code only cleanly elides + // the prefix properly if the output string is completely empty. + p.Print(e.prefix) + } if p.Detail() { - p.Print("\n(opaque error wrapper)") - p.Printf("\ntype name: %s", e.details.OriginalTypeName) + p.Printf("\n(opaque error wrapper)") + p.Printf("\ntype name: %s", redact.Safe(e.details.OriginalTypeName)) for i, d := range e.details.ReportablePayload { - p.Printf("\nreportable %d:\n%s", i, d) + p.Printf("\nreportable %d:\n%s", redact.Safe(i), redact.Safe(d)) } if e.details.FullDetails != nil { - p.Printf("\npayload type: %s", e.details.FullDetails.TypeUrl) + p.Printf("\npayload type: %s", redact.Safe(e.details.FullDetails.TypeUrl)) } } + if e.messageType == FullMessage { + return nil + } return e.cause } diff --git a/errbase/opaque_test.go b/errbase/opaque_test.go new file mode 100644 index 0000000..68eedf6 --- /dev/null +++ b/errbase/opaque_test.go @@ -0,0 +1,58 @@ +// Copyright 2023 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package errbase + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/cockroachdb/errors/testutils" + "github.com/kr/pretty" +) + +func TestUnknownWrapperTraversalWithMessageOverride(t *testing.T) { + // Simulating scenario where the new field on the opaque wrapper is dropped + // in the middle of the chain by a node running an older version. + + origErr := fmt.Errorf("this is a wrapped err %w with a non-prefix wrap msg", errors.New("hello")) + t.Logf("start err: %# v", pretty.Formatter(origErr)) + + // Encode the error, this will use the encoder. + enc := EncodeError(context.Background(), origErr) + t.Logf("encoded: %# v", pretty.Formatter(enc)) + + newErr := DecodeError(context.Background(), enc) + t.Logf("decoded: %# v", pretty.Formatter(newErr)) + + // simulate node not knowing about `messageType` field + newErr.(*opaqueWrapper).messageType = Prefix + + // Encode it again, to simulate the error passed on to another system. + enc2 := EncodeError(context.Background(), newErr) + t.Logf("encoded2: %# v", pretty.Formatter(enc)) + + // Then decode again. + newErr2 := DecodeError(context.Background(), enc2) + t.Logf("decoded: %# v", pretty.Formatter(newErr2)) + + tt := testutils.T{T: t} + + // We expect to see an erroneous `: hello` because our + // error passes through a node which drops the new protobuf + // field. + tt.CheckEqual(newErr2.Error(), origErr.Error()+": hello") +} diff --git a/errbase/format_simple.go b/errbase/oserror_go116.go similarity index 51% rename from errbase/format_simple.go rename to errbase/oserror_go116.go index 31b85f9..00fa11a 100644 --- a/errbase/format_simple.go +++ b/errbase/oserror_go116.go @@ -1,4 +1,4 @@ -// Copyright 2019 The Cockroach Authors. +// Copyright 2021 The Cockroach Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,25 +12,13 @@ // implied. See the License for the specific language governing // permissions and limitations under the License. +// +build go1.16 + package errbase -import "io" +import "io/fs" -// formatSimpleError is a helper used by FormatError() for the top -// level error/wrapper argument, if it does not implement the -// errors.Formatter interface. -func formatSimpleError(err error, p *state, sep string) error { - if cause := UnwrapOnce(err); cause != nil { - pref := extractPrefix(err, cause) - p.buf.WriteString(pref) - if pref != "" { - p.buf.WriteByte(':') - p.buf.WriteString(sep) - } - err = cause - } else { - io.WriteString(&p.buf, err.Error()) - err = nil - } - return err +func registerOsPathErrorMigration() { + // The os.PathError type was migrated to io.fs.PathError in Go 1.16. + RegisterTypeMigration("os", "*os.PathError", &fs.PathError{}) } diff --git a/errbase/oserror_pre116.go b/errbase/oserror_pre116.go new file mode 100644 index 0000000..62eeb7d --- /dev/null +++ b/errbase/oserror_pre116.go @@ -0,0 +1,19 @@ +// Copyright 2021 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// +build !go1.16 + +package errbase + +func registerOsPathErrorMigration() {} diff --git a/errbase/safe_details.go b/errbase/safe_details.go index 8eebdb3..0f692c4 100644 --- a/errbase/safe_details.go +++ b/errbase/safe_details.go @@ -81,8 +81,13 @@ type SafeDetailPayload struct { // Fill can be used to concatenate multiple SafeDetailPayloads. func (s *SafeDetailPayload) Fill(slice []string) []string { - slice = append(slice, fmt.Sprintf("-- details for %s::%s:", + if len(s.SafeDetails) == 0 { + return slice + } + slice = append(slice, fmt.Sprintf("details for %s::%s:", s.ErrorTypeMark.FamilyName, s.ErrorTypeMark.Extension)) - slice = append(slice, s.SafeDetails...) + for _, sd := range s.SafeDetails { + slice = append(slice, " "+sd) + } return slice } diff --git a/errbase/stack_format_test.go b/errbase/stack_format_test.go new file mode 100644 index 0000000..a6d98f9 --- /dev/null +++ b/errbase/stack_format_test.go @@ -0,0 +1,109 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package errbase_test + +import ( + "fmt" + "regexp" + "strings" + "testing" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/testutils" + pkgErr "github.com/pkg/errors" +) + +func TestSimplifyStacks(t *testing.T) { + leaf := func() error { + return pkgErr.New("hello world") + } + wrapper := func() error { + err := leaf() + return pkgErr.WithStack(err) + } + errWrapper := wrapper() + t.Logf("error: %+v", errWrapper) + + t.Run("low level API", func(t *testing.T) { + tt := testutils.T{t} + // Extract the stack trace from the leaf. + errLeaf := errbase.UnwrapOnce(errWrapper) + leafP, ok := errLeaf.(errbase.StackTraceProvider) + if !ok { + t.Fatal("leaf error does not provide stack trace") + } + leafT := leafP.StackTrace() + spv := fmtClean(leafT) + t.Logf("-- leaf trace --%+v", spv) + if !strings.Contains(spv, "TestSimplifyStacks") { + t.Fatalf("expected test function in trace, got:%v", spv) + } + leafLines := strings.Split(spv, "\n") + + // Extract the stack trace from the wrapper. + wrapperP, ok := errWrapper.(errbase.StackTraceProvider) + if !ok { + t.Fatal("wrapper error does not provide stack trace") + } + wrapperT := wrapperP.StackTrace() + spv = fmtClean(wrapperT) + t.Logf("-- wrapper trace --%+v", spv) + wrapperLines := strings.Split(spv, "\n") + + // Sanity check before we verify the result. + tt.Check(len(wrapperLines) > 0) + tt.CheckDeepEqual(wrapperLines[3:], leafLines[5:]) + + // Elide the suffix and verify that we arrive to the same result. + simplified, hasElided := errbase.ElideSharedStackTraceSuffix(leafT, wrapperT) + spv = fmtClean(simplified) + t.Logf("-- simplified (%v) --%+v", hasElided, spv) + simplifiedLines := strings.Split(spv, "\n") + tt.CheckDeepEqual(simplifiedLines, wrapperLines[0:3]) + }) + + t.Run("high level API", func(t *testing.T) { + tt := testutils.T{t} + + spv := fmtClean(errbase.Formattable(errWrapper)) + tt.CheckStringEqual(spv, `hello world +(1) + -- stack trace: + | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks.func2 + | : + | [...repeated from below...] +Wraps: (2) hello world + | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks.func1 + | : + | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks.func2 + | : + | github.com/cockroachdb/errors/errbase_test.TestSimplifyStacks + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.withStack (2) *errors.fundamental`) + }) +} + +func fmtClean(x interface{}) string { + spv := fmt.Sprintf("%+v", x) + spv = fileref.ReplaceAllString(spv, ":") + spv = strings.ReplaceAll(spv, "\t", "") + return spv +} + +var fileref = regexp.MustCompile(`([a-zA-Z0-9\._/@-]*\.(?:go|s):\d+)`) diff --git a/errbase/unwrap.go b/errbase/unwrap.go index 031cf7f..bed4c9a 100644 --- a/errbase/unwrap.go +++ b/errbase/unwrap.go @@ -27,6 +27,16 @@ package errbase // It supports both errors implementing causer (`Cause()` method, from // github.com/pkg/errors) and `Wrapper` (`Unwrap()` method, from the // Go 2 error proposal). +// +// UnwrapOnce treats multi-errors (those implementing the +// `Unwrap() []error` interface as leaf-nodes since they cannot +// reasonably be iterated through to a single cause. These errors +// are typically constructed as a result of `fmt.Errorf` which results +// in a `wrapErrors` instance that contains an interpolated error +// string along with a list of causes. +// +// The go stdlib does not define output on `Unwrap()` for a multi-cause +// error, so we default to nil here. func UnwrapOnce(err error) (cause error) { switch e := err.(type) { case interface{ Cause() error }: @@ -39,6 +49,7 @@ func UnwrapOnce(err error) (cause error) { // UnwrapAll accesses the root cause object of the error. // If the error has no cause (leaf error), it is returned directly. +// UnwrapAll treats multi-errors as leaf nodes. func UnwrapAll(err error) error { for { if cause := UnwrapOnce(err); cause != nil { @@ -49,3 +60,12 @@ func UnwrapAll(err error) error { } return err } + +// UnwrapMulti access the slice of causes that an error contains, if it is a +// multi-error. +func UnwrapMulti(err error) []error { + if me, ok := err.(interface{ Unwrap() []error }); ok { + return me.Unwrap() + } + return nil +} diff --git a/errbase/unwrap_test.go b/errbase/unwrap_test.go index 5699f35..725420d 100644 --- a/errbase/unwrap_test.go +++ b/errbase/unwrap_test.go @@ -16,6 +16,7 @@ package errbase_test import ( "errors" + "fmt" "testing" "github.com/cockroachdb/errors/errbase" @@ -58,6 +59,18 @@ func TestMixedErrorWrapping(t *testing.T) { tt.CheckEqual(errbase.UnwrapAll(err3), err) } +func TestMultiErrorUnwrap(t *testing.T) { + tt := testutils.T{T: t} + + err := errors.New("hello") + err2 := pkgErr.WithMessage(err, "woo") + err3 := fmt.Errorf("%w %w", err, err2) + + tt.CheckEqual(errbase.UnwrapOnce(err3), nil) + tt.CheckEqual(errbase.UnwrapAll(err3), err3) + tt.CheckDeepEqual(errbase.UnwrapMulti(err3), []error{err, err2}) +} + type myWrapper struct{ cause error } func (w *myWrapper) Error() string { return w.cause.Error() } diff --git a/errbase_api.go b/errbase_api.go index f1569dc..da410f9 100644 --- a/errbase_api.go +++ b/errbase_api.go @@ -16,74 +16,238 @@ package errors import ( "context" + "fmt" "github.com/cockroachdb/errors/errbase" ) -// UnwrapOnce forwards a definition. +// UnwrapOnce accesses the direct cause of the error if any, otherwise +// returns nil. +// +// It supports both errors implementing causer (`Cause()` method, from +// github.com/pkg/errors) and `Wrapper` (`Unwrap()` method, from the +// Go 2 error proposal). func UnwrapOnce(err error) error { return errbase.UnwrapOnce(err) } -// UnwrapAll forwards a definition. +// UnwrapAll accesses the root cause object of the error. +// If the error has no cause (leaf error), it is returned directly. func UnwrapAll(err error) error { return errbase.UnwrapAll(err) } -// EncodedError forwards a definition. +// EncodedError is the type of an encoded (and protobuf-encodable) error. type EncodedError = errbase.EncodedError -// EncodeError forwards a definition. +// EncodeError encodes an error. func EncodeError(ctx context.Context, err error) EncodedError { return errbase.EncodeError(ctx, err) } -// DecodeError forwards a definition. +// DecodeError decodes an error. func DecodeError(ctx context.Context, enc EncodedError) error { return errbase.DecodeError(ctx, enc) } -// SafeDetailer forwards a definition. +// SafeDetailer is an interface that can be implemented by errors that +// can provide PII-free additional strings suitable for reporting or +// telemetry. type SafeDetailer = errbase.SafeDetailer -// GetAllSafeDetails forwards a definition. +// GetAllSafeDetails collects the safe details from the given error object +// and all its causes. +// The details are collected from outermost to innermost level of cause. func GetAllSafeDetails(err error) []SafeDetailPayload { return errbase.GetAllSafeDetails(err) } -// GetSafeDetails forwards a definition. +// GetSafeDetails collects the safe details from the given error +// object. If it is a wrapper, only the details from the wrapper are +// returned. func GetSafeDetails(err error) (payload SafeDetailPayload) { return errbase.GetSafeDetails(err) } -// SafeDetailPayload forwards a definition. +// SafeDetailPayload captures the safe strings for one +// level of wrapping. type SafeDetailPayload = errbase.SafeDetailPayload -// RegisterLeafDecoder forwards a definition. +// RegisterLeafDecoder can be used to register new leaf error types to +// the library. Registered types will be decoded using their own +// Go type when an error is decoded. Wrappers that have not been +// registered will be decoded using the opaqueLeaf type. +// +// Note: if the error type has been migrated from a previous location +// or a different type, ensure that RegisterTypeMigration() was called +// prior to RegisterLeafDecoder(). func RegisterLeafDecoder(typeName TypeKey, decoder LeafDecoder) { errbase.RegisterLeafDecoder(typeName, decoder) } -// TypeKey forwards a definition. +// TypeKey identifies an error for the purpose of looking up decoders. +// It is equivalent to the "family name" in ErrorTypeMarker. type TypeKey = errbase.TypeKey -// GetTypeKey forwards a definition. +// GetTypeKey retrieve the type key for a given error object. This +// is meant for use in combination with the Register functions. func GetTypeKey(err error) TypeKey { return errbase.GetTypeKey(err) } -// LeafDecoder forwards a definition. +// LeafDecoder is to be provided (via RegisterLeafDecoder above) +// by additional wrapper types not yet known to this library. +// A nil return indicates that decoding was not successful. type LeafDecoder = errbase.LeafDecoder -// RegisterWrapperDecoder forwards a definition. +// MultiCauseDecoder is to be provided (via RegisterMultiCauseDecoder +// above) by additional multi-cause wrapper types not yet known by the +// library. A nil return indicates that decoding was not successful. +type MultiCauseDecoder = errbase.MultiCauseDecoder + +// RegisterMultiCauseDecoder can be used to register new multi-cause +// wrapper types to the library. Registered wrappers will be decoded +// using their own Go type when an error is decoded. Multi-cause +// wrappers that have not been registered will be decoded using the +// opaqueWrapper type. +func RegisterMultiCauseDecoder(theType TypeKey, decoder MultiCauseDecoder) { + errbase.RegisterMultiCauseDecoder(theType, decoder) +} + +// RegisterWrapperDecoder can be used to register new wrapper types to +// the library. Registered wrappers will be decoded using their own +// Go type when an error is decoded. Wrappers that have not been +// registered will be decoded using the opaqueWrapper type. +// +// Note: if the error type has been migrated from a previous location +// or a different type, ensure that RegisterTypeMigration() was called +// prior to RegisterWrapperDecoder(). func RegisterWrapperDecoder(typeName TypeKey, decoder WrapperDecoder) { errbase.RegisterWrapperDecoder(typeName, decoder) } -// WrapperDecoder forwards a definition. +// WrapperDecoder is to be provided (via RegisterWrapperDecoder above) +// by additional wrapper types not yet known to this library. +// A nil return indicates that decoding was not successful. type WrapperDecoder = errbase.WrapperDecoder -// RegisterLeafEncoder forwards a definition. +// RegisterLeafEncoder can be used to register new leaf error types to +// the library. Registered types will be encoded using their own +// Go type when an error is encoded. Wrappers that have not been +// registered will be encoded using the opaqueLeaf type. +// +// Note: if the error type has been migrated from a previous location +// or a different type, ensure that RegisterTypeMigration() was called +// prior to RegisterLeafEncoder(). func RegisterLeafEncoder(typeName TypeKey, encoder LeafEncoder) { errbase.RegisterLeafEncoder(typeName, encoder) } -// LeafEncoder forwards a definition. +// LeafEncoder is to be provided (via RegisterLeafEncoder above) +// by additional wrapper types not yet known to this library. type LeafEncoder = errbase.LeafEncoder -// RegisterWrapperEncoder forwards a definition. +// RegisterWrapperEncoder can be used to register new wrapper types to +// the library. Registered wrappers will be encoded using their own +// Go type when an error is encoded. Wrappers that have not been +// registered will be encoded using the opaqueWrapper type. +// +// Note: if the error type has been migrated from a previous location +// or a different type, ensure that RegisterTypeMigration() was called +// prior to RegisterWrapperEncoder(). func RegisterWrapperEncoder(typeName TypeKey, encoder WrapperEncoder) { errbase.RegisterWrapperEncoder(typeName, encoder) } -// WrapperEncoder forwards a definition. +// WrapperEncoder is to be provided (via RegisterWrapperEncoder above) +// by additional wrapper types not yet known to this library. type WrapperEncoder = errbase.WrapperEncoder -// SetWarningFn forwards a definition. +// RegisterWrapperEncoderWithMessageType can be used to register new wrapper +// types to the library. These wrappers can optionally override the child error +// messages with their own error string instead of relying on iterative +// concatenation. Registered wrappers will be encoded using their own Go type +// when an error is encoded. Wrappers that have not been registered will be +// encoded using the opaqueWrapper type. +// +// Note: if the error type has been migrated from a previous location +// or a different type, ensure that RegisterTypeMigration() was called +// prior to RegisterWrapperEncoder(). +func RegisterWrapperEncoderWithMessageType(typeName TypeKey, encoder WrapperEncoderWithMessageType) { + errbase.RegisterWrapperEncoderWithMessageType(typeName, encoder) +} + +// WrapperEncoderWithMessageType is to be provided (via +// RegisterWrapperEncoderWithMessageType) by additional wrapper +// types not yet known to this library. +type WrapperEncoderWithMessageType = errbase.WrapperEncoderWithMessageType + +// RegisterMultiCauseEncoder can be used to register new multi-cause +// error types to the library. Registered types will be encoded using +// their own Go type when an error is encoded. Multi-cause wrappers +// that have not been registered will be encoded using the +// opaqueWrapper type. +func RegisterMultiCauseEncoder(typeName TypeKey, encoder MultiCauseEncoder) { + errbase.RegisterMultiCauseEncoder(typeName, encoder) +} + +// MultiCauseEncoder is to be provided (via RegisterMultiCauseEncoder +// above) by additional multi-cause wrapper types not yet known to this +// library. The encoder will automatically extract and encode the +// causes of this error by calling `Unwrap()` and expecting a slice of +// errors. +type MultiCauseEncoder = errbase.MultiCauseEncoder + +// SetWarningFn enables configuration of the warning function. func SetWarningFn(fn func(context.Context, string, ...interface{})) { errbase.SetWarningFn(fn) } + +// A Formatter formats error messages. +// +// NB: Consider implementing SafeFormatter instead. This will ensure +// that error displays can distinguish bits that are PII-safe. +type Formatter = errbase.Formatter + +// SafeFormatter is implemented by error leaf or wrapper types that want +// to separate safe and non-safe information when printed out. +// +// When multiple errors are chained (e.g. via errors.Wrap), intermediate +// layers in the error that do not implement SafeError are considered +// “unsafe” +type SafeFormatter = errbase.SafeFormatter + +// A Printer formats error messages. +// +// The most common implementation of Printer is the one provided by package fmt +// during Printf (as of Go 1.13). Localization packages such as golang.org/x/text/message +// typically provide their own implementations. +type Printer = errbase.Printer + +// FormatError formats an error according to s and verb. +// This is a helper meant for use when implementing the fmt.Formatter +// interface on custom error objects. +// +// If the error implements errors.Formatter, FormatError calls its +// FormatError method of f with an errors.Printer configured according +// to s and verb, and writes the result to s. +// +// Otherwise, if it is a wrapper, FormatError prints out its error prefix, +// then recurses on its cause. +// +// Otherwise, its Error() text is printed. +func FormatError(err error, s fmt.State, verb rune) { errbase.FormatError(err, s, verb) } + +// Formattable wraps an error into a fmt.Formatter which +// will provide "smart" formatting even if the outer layer +// of the error does not implement the Formatter interface. +func Formattable(err error) fmt.Formatter { return errbase.Formattable(err) } + +// RegisterTypeMigration tells the library that the type of the error +// given as 3rd argument was previously known with type +// previousTypeName, located at previousPkgPath. +// +// The value of previousTypeName must be the result of calling +// reflect.TypeOf(err).String() on the original error object. +// This is usually composed as follows: +// +// [*]. +// +// For example, Go's standard error type has name "*errors.errorString". +// The asterisk indicates that `errorString` implements the `error` +// interface via pointer receiver. +// +// Meanwhile, the singleton error type context.DeadlineExceeded +// has name "context.deadlineExceededError", without asterisk +// because the type implements `error` by value. +// +// Remember that the short package name inside the error type name and +// the last component of the package path can be different. This is +// why they must be specified separately. +func RegisterTypeMigration(previousPkgPath, previousTypeName string, newType error) { + errbase.RegisterTypeMigration(previousPkgPath, previousTypeName, newType) +} diff --git a/errorspb/errors.go b/errorspb/errors.go new file mode 100644 index 0000000..5cfc5eb --- /dev/null +++ b/errorspb/errors.go @@ -0,0 +1,21 @@ +// Copyright 2021 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package errorspb + +// IsSet returns true if the EncodedError contains an error, or false if it is +// empty. +func (m *EncodedError) IsSet() bool { + return m.Error != nil +} diff --git a/errorspb/errors.pb.go b/errorspb/errors.pb.go index e7daced..3ec6bfe 100644 --- a/errorspb/errors.pb.go +++ b/errorspb/errors.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/cockroachdb/errors/errorspb/errors.proto +// source: errorspb/errors.proto package errorspb @@ -22,31 +22,61 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MessageType encodes information regarding the interpretation of an +// error's message string. +type MessageType int32 + +const ( + // Keeping zero value as default for backwards compatibility. + // PREFIX is a message that should be prepended to its cause. + MessageType_PREFIX MessageType = 0 + // FULL_MESSAGE is a complete error message that can be displayed + // without its cause. + MessageType_FULL_MESSAGE MessageType = 1 +) + +var MessageType_name = map[int32]string{ + 0: "PREFIX", + 1: "FULL_MESSAGE", +} + +var MessageType_value = map[string]int32{ + "PREFIX": 0, + "FULL_MESSAGE": 1, +} + +func (x MessageType) String() string { + return proto.EnumName(MessageType_name, int32(x)) +} + +func (MessageType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_ddc818d0729874b8, []int{0} +} // EncodedError is the wire-encodable representation // of an error (or error cause chain). type EncodedError struct { // Types that are valid to be assigned to Error: + // // *EncodedError_Leaf // *EncodedError_Wrapper - Error isEncodedError_Error `protobuf_oneof:"error"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Error isEncodedError_Error `protobuf_oneof:"error"` } func (m *EncodedError) Reset() { *m = EncodedError{} } func (m *EncodedError) String() string { return proto.CompactTextString(m) } func (*EncodedError) ProtoMessage() {} func (*EncodedError) Descriptor() ([]byte, []int) { - return fileDescriptor_944f594f558e0794, []int{0} + return fileDescriptor_ddc818d0729874b8, []int{0} } func (m *EncodedError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *EncodedError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -71,10 +101,10 @@ type isEncodedError_Error interface { } type EncodedError_Leaf struct { - Leaf *EncodedErrorLeaf `protobuf:"bytes,1,opt,name=leaf,proto3,oneof"` + Leaf *EncodedErrorLeaf `protobuf:"bytes,1,opt,name=leaf,proto3,oneof" json:"leaf,omitempty"` } type EncodedError_Wrapper struct { - Wrapper *EncodedWrapper `protobuf:"bytes,2,opt,name=wrapper,proto3,oneof"` + Wrapper *EncodedWrapper `protobuf:"bytes,2,opt,name=wrapper,proto3,oneof" json:"wrapper,omitempty"` } func (*EncodedError_Leaf) isEncodedError_Error() {} @@ -101,105 +131,42 @@ func (m *EncodedError) GetWrapper() *EncodedWrapper { return nil } -// XXX_OneofFuncs is for the internal use of the proto package. -func (*EncodedError) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { - return _EncodedError_OneofMarshaler, _EncodedError_OneofUnmarshaler, _EncodedError_OneofSizer, []interface{}{ +// XXX_OneofWrappers is for the internal use of the proto package. +func (*EncodedError) XXX_OneofWrappers() []interface{} { + return []interface{}{ (*EncodedError_Leaf)(nil), (*EncodedError_Wrapper)(nil), } } -func _EncodedError_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { - m := msg.(*EncodedError) - // error - switch x := m.Error.(type) { - case *EncodedError_Leaf: - _ = b.EncodeVarint(1<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Leaf); err != nil { - return err - } - case *EncodedError_Wrapper: - _ = b.EncodeVarint(2<<3 | proto.WireBytes) - if err := b.EncodeMessage(x.Wrapper); err != nil { - return err - } - case nil: - default: - return fmt.Errorf("EncodedError.Error has unexpected type %T", x) - } - return nil -} - -func _EncodedError_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { - m := msg.(*EncodedError) - switch tag { - case 1: // error.leaf - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(EncodedErrorLeaf) - err := b.DecodeMessage(msg) - m.Error = &EncodedError_Leaf{msg} - return true, err - case 2: // error.wrapper - if wire != proto.WireBytes { - return true, proto.ErrInternalBadWireType - } - msg := new(EncodedWrapper) - err := b.DecodeMessage(msg) - m.Error = &EncodedError_Wrapper{msg} - return true, err - default: - return false, nil - } -} - -func _EncodedError_OneofSizer(msg proto.Message) (n int) { - m := msg.(*EncodedError) - // error - switch x := m.Error.(type) { - case *EncodedError_Leaf: - s := proto.Size(x.Leaf) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case *EncodedError_Wrapper: - s := proto.Size(x.Wrapper) - n += 1 // tag and wire - n += proto.SizeVarint(uint64(s)) - n += s - case nil: - default: - panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) - } - return n -} - // EncodedErrorLeaf is the wire-encodable representation -// of an error leaf. +// of an error leaf or a multi-cause wrapper from go 1.20+ type EncodedErrorLeaf struct { // The main error message (mandatory), that can be printed to human // users and may contain PII. This contains the value of the leaf // error's Error(), or using a registered encoder. Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` // The error details. - Details EncodedErrorDetails `protobuf:"bytes,2,opt,name=details,proto3" json:"details"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Details EncodedErrorDetails `protobuf:"bytes,2,opt,name=details,proto3" json:"details"` + // multierror_causes is a list of errors that contain the causal tree + // of this leaf. If this field is not empty, then this leaf encodes + // an error from go 1.20 or later that encodes multiple causes in its + // chain. + MultierrorCauses []*EncodedError `protobuf:"bytes,3,rep,name=multierror_causes,json=multierrorCauses,proto3" json:"multierror_causes,omitempty"` } func (m *EncodedErrorLeaf) Reset() { *m = EncodedErrorLeaf{} } func (m *EncodedErrorLeaf) String() string { return proto.CompactTextString(m) } func (*EncodedErrorLeaf) ProtoMessage() {} func (*EncodedErrorLeaf) Descriptor() ([]byte, []int) { - return fileDescriptor_944f594f558e0794, []int{1} + return fileDescriptor_ddc818d0729874b8, []int{1} } func (m *EncodedErrorLeaf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *EncodedErrorLeaf) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -243,23 +210,21 @@ type EncodedErrorDetails struct { // // This is extracted automatically using a registered encoder, if // any. - FullDetails *types.Any `protobuf:"bytes,4,opt,name=full_details,json=fullDetails,proto3" json:"full_details,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + FullDetails *types.Any `protobuf:"bytes,4,opt,name=full_details,json=fullDetails,proto3" json:"full_details,omitempty"` } func (m *EncodedErrorDetails) Reset() { *m = EncodedErrorDetails{} } func (m *EncodedErrorDetails) String() string { return proto.CompactTextString(m) } func (*EncodedErrorDetails) ProtoMessage() {} func (*EncodedErrorDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_944f594f558e0794, []int{2} + return fileDescriptor_ddc818d0729874b8, []int{2} } func (m *EncodedErrorDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *EncodedErrorDetails) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -282,33 +247,37 @@ var xxx_messageInfo_EncodedErrorDetails proto.InternalMessageInfo type EncodedWrapper struct { // The cause error. Mandatory. Cause EncodedError `protobuf:"bytes,1,opt,name=cause,proto3" json:"cause"` - // The wrapper message prefix (which may be empty). This - // isbprinted before the cause's own message when - // constructing a full message. This may contain PII. + // The wrapper message. This could either be a full error message + // that can be printed independently, or a (potentially empty) prefix + // which is printed before the cause's own message to construct the + // full message. This may contain PII. // // This is extracted automatically: // // - for wrappers that have a registered encoder, // - otherwise, when the wrapper's Error() has its cause's Error() as suffix. - MessagePrefix string `protobuf:"bytes,2,opt,name=message_prefix,json=messagePrefix,proto3" json:"message_prefix,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // The error details. - Details EncodedErrorDetails `protobuf:"bytes,3,opt,name=details,proto3" json:"details"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Details EncodedErrorDetails `protobuf:"bytes,3,opt,name=details,proto3" json:"details"` + // message_type encodes the interpretation of `message`. Prior + // versions will not set this field and it will be left as `PREFIX`. + // This retains backwards compatibility since the new behavior is + // only enabled when this enum is set to `FULL_MESSAGE`. + MessageType MessageType `protobuf:"varint,4,opt,name=message_type,json=messageType,proto3,enum=cockroach.errorspb.MessageType" json:"message_type,omitempty"` } func (m *EncodedWrapper) Reset() { *m = EncodedWrapper{} } func (m *EncodedWrapper) String() string { return proto.CompactTextString(m) } func (*EncodedWrapper) ProtoMessage() {} func (*EncodedWrapper) Descriptor() ([]byte, []int) { - return fileDescriptor_944f594f558e0794, []int{3} + return fileDescriptor_ddc818d0729874b8, []int{3} } func (m *EncodedWrapper) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *EncodedWrapper) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -341,23 +310,21 @@ type ErrorTypeMark struct { // into separate equivalence classes. // See the `markers` error package and the // RFC on error handling for details. - Extension string `protobuf:"bytes,2,opt,name=extension,proto3" json:"extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Extension string `protobuf:"bytes,2,opt,name=extension,proto3" json:"extension,omitempty"` } func (m *ErrorTypeMark) Reset() { *m = ErrorTypeMark{} } func (m *ErrorTypeMark) String() string { return proto.CompactTextString(m) } func (*ErrorTypeMark) ProtoMessage() {} func (*ErrorTypeMark) Descriptor() ([]byte, []int) { - return fileDescriptor_944f594f558e0794, []int{4} + return fileDescriptor_ddc818d0729874b8, []int{4} } func (m *ErrorTypeMark) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *ErrorTypeMark) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -375,57 +342,153 @@ func (m *ErrorTypeMark) XXX_DiscardUnknown() { var xxx_messageInfo_ErrorTypeMark proto.InternalMessageInfo +// StringsPayload is used to encode the payload of certain error +// types. +type StringsPayload struct { + Details []string `protobuf:"bytes,1,rep,name=details,proto3" json:"details,omitempty"` +} + +func (m *StringsPayload) Reset() { *m = StringsPayload{} } +func (m *StringsPayload) String() string { return proto.CompactTextString(m) } +func (*StringsPayload) ProtoMessage() {} +func (*StringsPayload) Descriptor() ([]byte, []int) { + return fileDescriptor_ddc818d0729874b8, []int{5} +} +func (m *StringsPayload) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StringsPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *StringsPayload) XXX_Merge(src proto.Message) { + xxx_messageInfo_StringsPayload.Merge(m, src) +} +func (m *StringsPayload) XXX_Size() int { + return m.Size() +} +func (m *StringsPayload) XXX_DiscardUnknown() { + xxx_messageInfo_StringsPayload.DiscardUnknown(m) +} + +var xxx_messageInfo_StringsPayload proto.InternalMessageInfo + +// ErrnoPayload is used to encode the payload of syscall.Errno +// errors. +type ErrnoPayload struct { + // The original errno numeric code. + OrigErrno int64 `protobuf:"varint,1,opt,name=orig_errno,json=origErrno,proto3" json:"orig_errno,omitempty"` + // The platform where the syscall.Errno was encoded. This + // is needed because the numeric values of syscall.Errno + // have different meanings depending on the platform. + // When decoding, if the arch field does not match we + // use a substitute data type instead. + Arch string `protobuf:"bytes,2,opt,name=arch,proto3" json:"arch,omitempty"` + IsPermission bool `protobuf:"varint,3,opt,name=is_permission,json=isPermission,proto3" json:"is_permission,omitempty"` + IsExist bool `protobuf:"varint,4,opt,name=is_exist,json=isExist,proto3" json:"is_exist,omitempty"` + IsNotExist bool `protobuf:"varint,5,opt,name=is_not_exist,json=isNotExist,proto3" json:"is_not_exist,omitempty"` + IsTimeout bool `protobuf:"varint,6,opt,name=is_timeout,json=isTimeout,proto3" json:"is_timeout,omitempty"` + IsTemporary bool `protobuf:"varint,7,opt,name=is_temporary,json=isTemporary,proto3" json:"is_temporary,omitempty"` +} + +func (m *ErrnoPayload) Reset() { *m = ErrnoPayload{} } +func (m *ErrnoPayload) String() string { return proto.CompactTextString(m) } +func (*ErrnoPayload) ProtoMessage() {} +func (*ErrnoPayload) Descriptor() ([]byte, []int) { + return fileDescriptor_ddc818d0729874b8, []int{6} +} +func (m *ErrnoPayload) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ErrnoPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ErrnoPayload) XXX_Merge(src proto.Message) { + xxx_messageInfo_ErrnoPayload.Merge(m, src) +} +func (m *ErrnoPayload) XXX_Size() int { + return m.Size() +} +func (m *ErrnoPayload) XXX_DiscardUnknown() { + xxx_messageInfo_ErrnoPayload.DiscardUnknown(m) +} + +var xxx_messageInfo_ErrnoPayload proto.InternalMessageInfo + func init() { + proto.RegisterEnum("cockroach.errorspb.MessageType", MessageType_name, MessageType_value) proto.RegisterType((*EncodedError)(nil), "cockroach.errorspb.EncodedError") proto.RegisterType((*EncodedErrorLeaf)(nil), "cockroach.errorspb.EncodedErrorLeaf") proto.RegisterType((*EncodedErrorDetails)(nil), "cockroach.errorspb.EncodedErrorDetails") proto.RegisterType((*EncodedWrapper)(nil), "cockroach.errorspb.EncodedWrapper") proto.RegisterType((*ErrorTypeMark)(nil), "cockroach.errorspb.ErrorTypeMark") + proto.RegisterType((*StringsPayload)(nil), "cockroach.errorspb.StringsPayload") + proto.RegisterType((*ErrnoPayload)(nil), "cockroach.errorspb.ErrnoPayload") } -func init() { - proto.RegisterFile("github.com/cockroachdb/errors/errorspb/errors.proto", fileDescriptor_944f594f558e0794) -} - -var fileDescriptor_944f594f558e0794 = []byte{ - // 488 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x52, 0x4d, 0x6b, 0xd4, 0x50, - 0x14, 0x4d, 0x9c, 0xa9, 0xe3, 0xdc, 0xe9, 0xd4, 0xfa, 0xec, 0x62, 0x2c, 0x92, 0x8e, 0x41, 0xb1, - 0x0b, 0x4d, 0xc0, 0x2e, 0x04, 0x11, 0xc1, 0xc1, 0x62, 0x17, 0x5a, 0x4b, 0x10, 0x04, 0x37, 0xe1, - 0x25, 0xb9, 0x49, 0xc3, 0x24, 0x79, 0xe1, 0x25, 0xc1, 0xe6, 0x5f, 0x08, 0xfe, 0x1f, 0xd7, 0xb3, - 0x74, 0xe9, 0x4a, 0x74, 0xfc, 0x1b, 0x2e, 0x24, 0xef, 0xc3, 0x4e, 0xb5, 0xd8, 0x45, 0x57, 0x79, - 0xef, 0xdc, 0x73, 0x72, 0xcf, 0xbb, 0xe7, 0xc2, 0x5e, 0x92, 0xd6, 0xc7, 0x4d, 0xe0, 0x84, 0x2c, - 0x77, 0x43, 0x16, 0xce, 0x39, 0xa3, 0xe1, 0x71, 0x14, 0xb8, 0xc8, 0x39, 0xe3, 0x95, 0xfa, 0x94, - 0xfa, 0xee, 0x94, 0x9c, 0xd5, 0x8c, 0x90, 0x3f, 0x4c, 0x47, 0x13, 0xb6, 0x6f, 0x25, 0x8c, 0x25, - 0x19, 0xba, 0x82, 0x11, 0x34, 0xb1, 0x4b, 0x8b, 0x56, 0xd2, 0xb7, 0xb7, 0x12, 0x96, 0x30, 0x71, - 0x74, 0xbb, 0x93, 0x44, 0xed, 0x4f, 0x26, 0xac, 0xef, 0x17, 0x21, 0x8b, 0x30, 0xda, 0xef, 0x7e, - 0x42, 0x9e, 0x40, 0x3f, 0x43, 0x1a, 0x4f, 0xcc, 0xa9, 0xb9, 0x3b, 0x7a, 0x74, 0xd7, 0xf9, 0xb7, - 0x89, 0xb3, 0xca, 0x7f, 0x85, 0x34, 0x3e, 0x30, 0x3c, 0xa1, 0x21, 0xcf, 0x60, 0xf0, 0x81, 0xd3, - 0xb2, 0x44, 0x3e, 0xb9, 0x22, 0xe4, 0xf6, 0x7f, 0xe4, 0xef, 0x24, 0xf3, 0xc0, 0xf0, 0xb4, 0x68, - 0x36, 0x80, 0x35, 0xc1, 0xb2, 0x1b, 0xd8, 0xfc, 0xbb, 0x09, 0x99, 0xc0, 0x20, 0xc7, 0xaa, 0xa2, - 0x09, 0x0a, 0x6f, 0x43, 0x4f, 0x5f, 0xc9, 0x4b, 0x18, 0x44, 0x58, 0xd3, 0x34, 0xab, 0x54, 0xdb, - 0xfb, 0x17, 0xb9, 0x7e, 0x21, 0xe9, 0xb3, 0xfe, 0xe2, 0xdb, 0x8e, 0xe1, 0x69, 0xb5, 0xfd, 0xcb, - 0x84, 0x9b, 0xe7, 0xd0, 0xc8, 0x03, 0x20, 0x8c, 0xa7, 0x49, 0x5a, 0xd0, 0xcc, 0xaf, 0xdb, 0x12, - 0xfd, 0x82, 0xe6, 0xda, 0xc5, 0xa6, 0xae, 0xbc, 0x6d, 0x4b, 0x3c, 0xa4, 0x39, 0x92, 0x37, 0x70, - 0x5d, 0x34, 0x95, 0xd4, 0x9c, 0xf2, 0xb9, 0xb2, 0x75, 0xe7, 0x5c, 0x5b, 0xdd, 0xa1, 0xd3, 0xbe, - 0xa6, 0x7c, 0xae, 0x0c, 0x8d, 0x71, 0x15, 0x24, 0x0f, 0x81, 0x70, 0x2c, 0x19, 0xaf, 0x69, 0x90, - 0xa1, 0x5f, 0xd2, 0x36, 0x63, 0x34, 0x9a, 0xf4, 0xa6, 0xbd, 0xdd, 0xa1, 0x77, 0xe3, 0xb4, 0x72, - 0x24, 0x0b, 0xe4, 0x31, 0xac, 0xc7, 0x4d, 0x96, 0xf9, 0x7a, 0x26, 0x7d, 0xd1, 0x7c, 0xcb, 0x91, - 0xab, 0xe1, 0xe8, 0xd5, 0x70, 0x9e, 0x17, 0xad, 0x37, 0xea, 0x98, 0xea, 0x99, 0xf6, 0x67, 0x13, - 0x36, 0xce, 0x86, 0x43, 0x9e, 0xc2, 0x5a, 0x48, 0x9b, 0x0a, 0xd5, 0x3a, 0x4c, 0x2f, 0x1a, 0xac, - 0x7a, 0x80, 0x14, 0x91, 0x7b, 0xb0, 0xa1, 0x32, 0xf2, 0x4b, 0x8e, 0x71, 0x7a, 0x22, 0x06, 0x31, - 0xf4, 0xc6, 0x0a, 0x3d, 0x12, 0xe0, 0x6a, 0x7e, 0xbd, 0x4b, 0xe5, 0x77, 0x08, 0xe3, 0x33, 0xe3, - 0x24, 0x3b, 0x30, 0x8a, 0x69, 0x9e, 0x66, 0xed, 0x6a, 0x62, 0x20, 0x21, 0x91, 0xd5, 0x6d, 0x18, - 0xe2, 0x49, 0x8d, 0x45, 0x95, 0xb2, 0x42, 0x99, 0x3b, 0x05, 0x66, 0xf6, 0xe2, 0x87, 0x65, 0x2c, - 0x96, 0x96, 0xf9, 0x65, 0x69, 0x99, 0x5f, 0x97, 0x96, 0xf9, 0x7d, 0x69, 0x99, 0x1f, 0x7f, 0x5a, - 0xc6, 0xfb, 0x6b, 0xda, 0x56, 0x70, 0x55, 0xcc, 0x73, 0xef, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb0, 0x89, 0x04, 0xaf, 0xc3, 0x03, 0x00, 0x00, +func init() { proto.RegisterFile("errorspb/errors.proto", fileDescriptor_ddc818d0729874b8) } + +var fileDescriptor_ddc818d0729874b8 = []byte{ + // 693 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x41, 0x4f, 0x13, 0x41, + 0x14, 0xde, 0xa5, 0x85, 0xb6, 0xaf, 0x05, 0xcb, 0x88, 0xc9, 0x42, 0x64, 0x29, 0xab, 0x89, 0x04, + 0x75, 0x9b, 0xe0, 0xc1, 0xc4, 0x18, 0x13, 0xaa, 0x05, 0x4c, 0x28, 0x92, 0x05, 0xa3, 0xf1, 0xb2, + 0x99, 0xb6, 0xd3, 0x65, 0xc2, 0xee, 0xce, 0x66, 0x66, 0x1b, 0xd9, 0x7f, 0x61, 0xe2, 0x5f, 0xf2, + 0xc0, 0x91, 0x23, 0x27, 0xa3, 0x25, 0xfe, 0x04, 0x6f, 0x1e, 0xcc, 0xce, 0xee, 0xd8, 0xa2, 0x28, + 0x07, 0x6f, 0x6f, 0xde, 0xfb, 0xbe, 0xf7, 0xde, 0xf7, 0xde, 0x1b, 0xb8, 0x45, 0x38, 0x67, 0x5c, + 0x44, 0xdd, 0x66, 0x66, 0xd8, 0x11, 0x67, 0x31, 0x43, 0xa8, 0xc7, 0x7a, 0xc7, 0x9c, 0xe1, 0xde, + 0x91, 0xad, 0x00, 0x4b, 0x8b, 0x1e, 0x63, 0x9e, 0x4f, 0x9a, 0x12, 0xd1, 0x1d, 0x0e, 0x9a, 0x38, + 0x4c, 0x32, 0xf8, 0xd2, 0x82, 0xc7, 0x3c, 0x26, 0xcd, 0x66, 0x6a, 0x65, 0x5e, 0xeb, 0xa3, 0x0e, + 0xb5, 0x76, 0xd8, 0x63, 0x7d, 0xd2, 0x6f, 0xa7, 0x49, 0xd0, 0x13, 0x28, 0xfa, 0x04, 0x0f, 0x0c, + 0xbd, 0xa1, 0xaf, 0x55, 0x37, 0xee, 0xda, 0x7f, 0x16, 0xb1, 0x27, 0xf1, 0xbb, 0x04, 0x0f, 0x76, + 0x34, 0x47, 0x72, 0xd0, 0x33, 0x28, 0xbd, 0xe7, 0x38, 0x8a, 0x08, 0x37, 0xa6, 0x24, 0xdd, 0xfa, + 0x07, 0xfd, 0x4d, 0x86, 0xdc, 0xd1, 0x1c, 0x45, 0x6a, 0x95, 0x60, 0x5a, 0xa2, 0xac, 0x4f, 0x3a, + 0xd4, 0x7f, 0xaf, 0x82, 0x0c, 0x28, 0x05, 0x44, 0x08, 0xec, 0x11, 0xd9, 0x5c, 0xc5, 0x51, 0x4f, + 0xb4, 0x0d, 0xa5, 0x3e, 0x89, 0x31, 0xf5, 0x45, 0x5e, 0xf7, 0xde, 0x75, 0x6d, 0xbf, 0xc8, 0xe0, + 0xad, 0xe2, 0xe9, 0xe7, 0x15, 0xcd, 0x51, 0x6c, 0xd4, 0x81, 0xf9, 0x60, 0xe8, 0xc7, 0x54, 0x72, + 0xdc, 0x1e, 0x1e, 0x0a, 0x22, 0x8c, 0x42, 0xa3, 0xb0, 0x56, 0xdd, 0x68, 0x5c, 0x97, 0xd2, 0xa9, + 0x8f, 0xa9, 0xcf, 0x25, 0xd3, 0xfa, 0xa1, 0xc3, 0xcd, 0x2b, 0xaa, 0xa2, 0x07, 0x80, 0x18, 0xa7, + 0x1e, 0x0d, 0xb1, 0xef, 0xc6, 0x49, 0x44, 0xdc, 0x10, 0x07, 0x4a, 0x54, 0x5d, 0x45, 0x0e, 0x93, + 0x88, 0xec, 0xe1, 0x80, 0xa0, 0x57, 0x70, 0x23, 0xeb, 0x47, 0x42, 0x03, 0xcc, 0x8f, 0x73, 0x95, + 0xab, 0x57, 0xb6, 0x94, 0x1a, 0x29, 0xb7, 0x83, 0xf9, 0x71, 0xae, 0x6f, 0x96, 0x4c, 0x3a, 0xd1, + 0x43, 0x40, 0x9c, 0x44, 0x8c, 0xc7, 0xb8, 0xeb, 0x13, 0x37, 0xc2, 0x89, 0xcf, 0x70, 0x5f, 0xca, + 0xac, 0x38, 0xf3, 0xe3, 0xc8, 0x7e, 0x16, 0x40, 0x8f, 0xa1, 0x36, 0x18, 0xfa, 0xbe, 0xab, 0x46, + 0x5c, 0x94, 0xc5, 0x17, 0xec, 0xec, 0xd4, 0x6c, 0x75, 0x6a, 0xf6, 0x66, 0x98, 0x38, 0xd5, 0x14, + 0x99, 0xcb, 0xb4, 0xbe, 0xeb, 0x30, 0x77, 0x79, 0xd9, 0xe8, 0x29, 0x4c, 0xcb, 0xa9, 0xe6, 0xe7, + 0x75, 0xed, 0x50, 0x73, 0x01, 0x19, 0x69, 0xf2, 0x02, 0xa6, 0xfe, 0x7a, 0x01, 0x85, 0xff, 0xba, + 0x80, 0x16, 0xd4, 0xf2, 0x9c, 0x72, 0xdc, 0x52, 0xec, 0xdc, 0xc6, 0xca, 0x55, 0xd9, 0x3a, 0x19, + 0x2e, 0x1d, 0xab, 0x53, 0x0d, 0xc6, 0x0f, 0x6b, 0x0f, 0x66, 0x2f, 0x6d, 0x01, 0xad, 0x40, 0x75, + 0x80, 0x03, 0xea, 0x27, 0x93, 0x8b, 0x86, 0xcc, 0x25, 0x57, 0x7c, 0x1b, 0x2a, 0xe4, 0x24, 0x26, + 0xa1, 0xa0, 0x2c, 0xcc, 0xa5, 0x8d, 0x1d, 0xd6, 0x3a, 0xcc, 0x1d, 0xc4, 0x9c, 0x86, 0x9e, 0x50, + 0x2b, 0x31, 0xc6, 0x72, 0x75, 0xb9, 0x36, 0xf5, 0xb4, 0xbe, 0xa5, 0xff, 0x99, 0xf3, 0x90, 0x29, + 0xe8, 0x32, 0x40, 0x7a, 0x51, 0x2e, 0x49, 0x9d, 0xb2, 0x74, 0xc1, 0xa9, 0xa4, 0x1e, 0x89, 0x42, + 0x08, 0x8a, 0x98, 0xf7, 0x8e, 0xf2, 0xa2, 0xd2, 0x46, 0x77, 0x60, 0x96, 0x0a, 0x37, 0x22, 0x3c, + 0xa0, 0x42, 0x76, 0x94, 0x8e, 0xb4, 0xec, 0xd4, 0xa8, 0xd8, 0xff, 0xe5, 0x43, 0x8b, 0x50, 0xa6, + 0xc2, 0x25, 0x27, 0x54, 0xc4, 0x72, 0x48, 0x65, 0xa7, 0x44, 0x45, 0x3b, 0x7d, 0xa2, 0x06, 0xd4, + 0xa8, 0x70, 0x43, 0x16, 0xe7, 0xe1, 0x69, 0x19, 0x06, 0x2a, 0xf6, 0x58, 0x9c, 0x21, 0x96, 0x01, + 0xa8, 0x70, 0x63, 0x1a, 0x10, 0x36, 0x8c, 0x8d, 0x19, 0x19, 0xaf, 0x50, 0x71, 0x98, 0x39, 0xd0, + 0xaa, 0x4c, 0x10, 0x93, 0x20, 0x62, 0x1c, 0xf3, 0xc4, 0x28, 0x49, 0x40, 0x95, 0x8a, 0x43, 0xe5, + 0x5a, 0xbf, 0x0f, 0xd5, 0x89, 0xf9, 0x23, 0x80, 0x99, 0x7d, 0xa7, 0xbd, 0xf5, 0xf2, 0x6d, 0x5d, + 0x43, 0x75, 0xa8, 0x6d, 0xbd, 0xde, 0xdd, 0x75, 0x3b, 0xed, 0x83, 0x83, 0xcd, 0xed, 0x76, 0x5d, + 0x6f, 0xad, 0x9f, 0x7e, 0x35, 0xb5, 0xd3, 0x91, 0xa9, 0x9f, 0x8d, 0x4c, 0xfd, 0x7c, 0x64, 0xea, + 0x5f, 0x46, 0xa6, 0xfe, 0xe1, 0xc2, 0xd4, 0xce, 0x2e, 0x4c, 0xed, 0xfc, 0xc2, 0xd4, 0xde, 0x95, + 0xd5, 0x56, 0xbb, 0x33, 0xf2, 0x9e, 0x1f, 0xfd, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x2c, 0x21, + 0xe3, 0x75, 0x05, 0x00, 0x00, } func (m *EncodedError) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -433,52 +496,73 @@ func (m *EncodedError) Marshal() (dAtA []byte, err error) { } func (m *EncodedError) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Error != nil { - nn1, err1 := m.Error.MarshalTo(dAtA[i:]) - if err1 != nil { - return 0, err1 + { + size := m.Error.Size() + i -= size + if _, err := m.Error.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } } - i += nn1 } - return i, nil + return len(dAtA) - i, nil } func (m *EncodedError_Leaf) MarshalTo(dAtA []byte) (int, error) { - i := 0 + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedError_Leaf) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) if m.Leaf != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.Leaf.Size())) - n2, err2 := m.Leaf.MarshalTo(dAtA[i:]) - if err2 != nil { - return 0, err2 + { + size, err := m.Leaf.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) } - i += n2 + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *EncodedError_Wrapper) MarshalTo(dAtA []byte) (int, error) { - i := 0 + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedError_Wrapper) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) if m.Wrapper != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.Wrapper.Size())) - n3, err3 := m.Wrapper.MarshalTo(dAtA[i:]) - if err3 != nil { - return 0, err3 + { + size, err := m.Wrapper.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) } - i += n3 + i-- + dAtA[i] = 0x12 } - return i, nil + return len(dAtA) - i, nil } func (m *EncodedErrorLeaf) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -486,31 +570,53 @@ func (m *EncodedErrorLeaf) Marshal() (dAtA []byte, err error) { } func (m *EncodedErrorLeaf) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedErrorLeaf) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Message) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintErrors(dAtA, i, uint64(len(m.Message))) - i += copy(dAtA[i:], m.Message) + if len(m.MultierrorCauses) > 0 { + for iNdEx := len(m.MultierrorCauses) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MultierrorCauses[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + { + size, err := m.Details.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.Details.Size())) - n4, err4 := m.Details.MarshalTo(dAtA[i:]) - if err4 != nil { - return 0, err4 + if len(m.Message) > 0 { + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintErrors(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0xa } - i += n4 - return i, nil + return len(dAtA) - i, nil } func (m *EncodedErrorDetails) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -518,56 +624,60 @@ func (m *EncodedErrorDetails) Marshal() (dAtA []byte, err error) { } func (m *EncodedErrorDetails) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedErrorDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.OriginalTypeName) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintErrors(dAtA, i, uint64(len(m.OriginalTypeName))) - i += copy(dAtA[i:], m.OriginalTypeName) - } - dAtA[i] = 0x12 - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.ErrorTypeMark.Size())) - n5, err5 := m.ErrorTypeMark.MarshalTo(dAtA[i:]) - if err5 != nil { - return 0, err5 + if m.FullDetails != nil { + { + size, err := m.FullDetails.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 } - i += n5 if len(m.ReportablePayload) > 0 { - for _, s := range m.ReportablePayload { + for iNdEx := len(m.ReportablePayload) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.ReportablePayload[iNdEx]) + copy(dAtA[i:], m.ReportablePayload[iNdEx]) + i = encodeVarintErrors(dAtA, i, uint64(len(m.ReportablePayload[iNdEx]))) + i-- dAtA[i] = 0x1a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) } } - if m.FullDetails != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.FullDetails.Size())) - n6, err6 := m.FullDetails.MarshalTo(dAtA[i:]) - if err6 != nil { - return 0, err6 + { + size, err := m.ErrorTypeMark.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i += n6 + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) } - return i, nil + i-- + dAtA[i] = 0x12 + if len(m.OriginalTypeName) > 0 { + i -= len(m.OriginalTypeName) + copy(dAtA[i:], m.OriginalTypeName) + i = encodeVarintErrors(dAtA, i, uint64(len(m.OriginalTypeName))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *EncodedWrapper) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -575,39 +685,54 @@ func (m *EncodedWrapper) Marshal() (dAtA []byte, err error) { } func (m *EncodedWrapper) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedWrapper) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.Cause.Size())) - n7, err7 := m.Cause.MarshalTo(dAtA[i:]) - if err7 != nil { - return 0, err7 - } - i += n7 - if len(m.MessagePrefix) > 0 { - dAtA[i] = 0x12 - i++ - i = encodeVarintErrors(dAtA, i, uint64(len(m.MessagePrefix))) - i += copy(dAtA[i:], m.MessagePrefix) + if m.MessageType != 0 { + i = encodeVarintErrors(dAtA, i, uint64(m.MessageType)) + i-- + dAtA[i] = 0x20 + } + { + size, err := m.Details.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) } + i-- dAtA[i] = 0x1a - i++ - i = encodeVarintErrors(dAtA, i, uint64(m.Details.Size())) - n8, err8 := m.Details.MarshalTo(dAtA[i:]) - if err8 != nil { - return 0, err8 + if len(m.Message) > 0 { + i -= len(m.Message) + copy(dAtA[i:], m.Message) + i = encodeVarintErrors(dAtA, i, uint64(len(m.Message))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Cause.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintErrors(dAtA, i, uint64(size)) } - i += n8 - return i, nil + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil } func (m *ErrorTypeMark) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -615,33 +740,159 @@ func (m *ErrorTypeMark) Marshal() (dAtA []byte, err error) { } func (m *ErrorTypeMark) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ErrorTypeMark) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if len(m.Extension) > 0 { + i -= len(m.Extension) + copy(dAtA[i:], m.Extension) + i = encodeVarintErrors(dAtA, i, uint64(len(m.Extension))) + i-- + dAtA[i] = 0x12 + } if len(m.FamilyName) > 0 { - dAtA[i] = 0xa - i++ + i -= len(m.FamilyName) + copy(dAtA[i:], m.FamilyName) i = encodeVarintErrors(dAtA, i, uint64(len(m.FamilyName))) - i += copy(dAtA[i:], m.FamilyName) + i-- + dAtA[i] = 0xa } - if len(m.Extension) > 0 { + return len(dAtA) - i, nil +} + +func (m *StringsPayload) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StringsPayload) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StringsPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Details) > 0 { + for iNdEx := len(m.Details) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Details[iNdEx]) + copy(dAtA[i:], m.Details[iNdEx]) + i = encodeVarintErrors(dAtA, i, uint64(len(m.Details[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ErrnoPayload) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ErrnoPayload) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ErrnoPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.IsTemporary { + i-- + if m.IsTemporary { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if m.IsTimeout { + i-- + if m.IsTimeout { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 + } + if m.IsNotExist { + i-- + if m.IsNotExist { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } + if m.IsExist { + i-- + if m.IsExist { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if m.IsPermission { + i-- + if m.IsPermission { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.Arch) > 0 { + i -= len(m.Arch) + copy(dAtA[i:], m.Arch) + i = encodeVarintErrors(dAtA, i, uint64(len(m.Arch))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintErrors(dAtA, i, uint64(len(m.Extension))) - i += copy(dAtA[i:], m.Extension) } - return i, nil + if m.OrigErrno != 0 { + i = encodeVarintErrors(dAtA, i, uint64(m.OrigErrno)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func encodeVarintErrors(dAtA []byte, offset int, v uint64) int { + offset -= sovErrors(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *EncodedError) Size() (n int) { if m == nil { @@ -691,6 +942,12 @@ func (m *EncodedErrorLeaf) Size() (n int) { } l = m.Details.Size() n += 1 + l + sovErrors(uint64(l)) + if len(m.MultierrorCauses) > 0 { + for _, e := range m.MultierrorCauses { + l = e.Size() + n += 1 + l + sovErrors(uint64(l)) + } + } return n } @@ -727,12 +984,15 @@ func (m *EncodedWrapper) Size() (n int) { _ = l l = m.Cause.Size() n += 1 + l + sovErrors(uint64(l)) - l = len(m.MessagePrefix) + l = len(m.Message) if l > 0 { n += 1 + l + sovErrors(uint64(l)) } l = m.Details.Size() n += 1 + l + sovErrors(uint64(l)) + if m.MessageType != 0 { + n += 1 + sovErrors(uint64(m.MessageType)) + } return n } @@ -753,6 +1013,52 @@ func (m *ErrorTypeMark) Size() (n int) { return n } +func (m *StringsPayload) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Details) > 0 { + for _, s := range m.Details { + l = len(s) + n += 1 + l + sovErrors(uint64(l)) + } + } + return n +} + +func (m *ErrnoPayload) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.OrigErrno != 0 { + n += 1 + sovErrors(uint64(m.OrigErrno)) + } + l = len(m.Arch) + if l > 0 { + n += 1 + l + sovErrors(uint64(l)) + } + if m.IsPermission { + n += 2 + } + if m.IsExist { + n += 2 + } + if m.IsNotExist { + n += 2 + } + if m.IsTimeout { + n += 2 + } + if m.IsTemporary { + n += 2 + } + return n +} + func sovErrors(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -864,10 +1170,7 @@ func (m *EncodedError) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthErrors - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthErrors } if (iNdEx + skippy) > l { @@ -976,16 +1279,47 @@ func (m *EncodedErrorLeaf) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MultierrorCauses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthErrors + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthErrors + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MultierrorCauses = append(m.MultierrorCauses, &EncodedError{}) + if err := m.MultierrorCauses[len(m.MultierrorCauses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipErrors(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthErrors - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthErrors } if (iNdEx + skippy) > l { @@ -1168,10 +1502,7 @@ func (m *EncodedErrorDetails) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthErrors - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthErrors } if (iNdEx + skippy) > l { @@ -1250,7 +1581,7 @@ func (m *EncodedWrapper) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MessagePrefix", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -1278,7 +1609,7 @@ func (m *EncodedWrapper) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.MessagePrefix = string(dAtA[iNdEx:postIndex]) + m.Message = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { @@ -1313,16 +1644,32 @@ func (m *EncodedWrapper) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MessageType", wireType) + } + m.MessageType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MessageType |= MessageType(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipErrors(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthErrors - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthErrors } if (iNdEx + skippy) > l { @@ -1436,10 +1783,290 @@ func (m *ErrorTypeMark) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthErrors + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StringsPayload) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StringsPayload: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StringsPayload: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthErrors + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthErrors + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Details = append(m.Details, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipErrors(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthErrors + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ErrnoPayload) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ErrnoPayload: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ErrnoPayload: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OrigErrno", wireType) + } + m.OrigErrno = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OrigErrno |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Arch", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthErrors } - if (iNdEx + skippy) < 0 { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthErrors + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Arch = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsPermission", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsPermission = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsExist", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsExist = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsNotExist", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsNotExist = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsTimeout", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsTimeout = bool(v != 0) + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsTemporary", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowErrors + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsTemporary = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipErrors(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthErrors } if (iNdEx + skippy) > l { @@ -1457,6 +2084,7 @@ func (m *ErrorTypeMark) Unmarshal(dAtA []byte) error { func skipErrors(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -1488,10 +2116,8 @@ func skipErrors(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -1512,55 +2138,30 @@ func skipErrors(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthErrors } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthErrors - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowErrors - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipErrors(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthErrors - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupErrors + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthErrors + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthErrors = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowErrors = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthErrors = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowErrors = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupErrors = fmt.Errorf("proto: unexpected end of group") ) diff --git a/errorspb/errors.proto b/errorspb/errors.proto index dfdafe7..aba161d 100644 --- a/errorspb/errors.proto +++ b/errorspb/errors.proto @@ -17,7 +17,7 @@ message EncodedError { } // EncodedErrorLeaf is the wire-encodable representation -// of an error leaf. +// of an error leaf or a multi-cause wrapper from go 1.20+ message EncodedErrorLeaf { // The main error message (mandatory), that can be printed to human // users and may contain PII. This contains the value of the leaf @@ -26,6 +26,12 @@ message EncodedErrorLeaf { // The error details. EncodedErrorDetails details = 2 [(gogoproto.nullable) = false]; + + // multierror_causes is a list of errors that contain the causal tree + // of this leaf. If this field is not empty, then this leaf encodes + // an error from go 1.20 or later that encodes multiple causes in its + // chain. + repeated EncodedError multierror_causes = 3; } message EncodedErrorDetails { @@ -60,24 +66,42 @@ message EncodedErrorDetails { google.protobuf.Any full_details = 4; } +// MessageType encodes information regarding the interpretation of an +// error's message string. +enum MessageType { + // Keeping zero value as default for backwards compatibility. + // PREFIX is a message that should be prepended to its cause. + PREFIX = 0; + // FULL_MESSAGE is a complete error message that can be displayed + // without its cause. + FULL_MESSAGE = 1; +} + // EncodedWrapper is the wire-encodable representation // of an error wrapper. message EncodedWrapper { // The cause error. Mandatory. EncodedError cause = 1 [(gogoproto.nullable) = false]; - // The wrapper message prefix (which may be empty). This - // isbprinted before the cause's own message when - // constructing a full message. This may contain PII. + // The wrapper message. This could either be a full error message + // that can be printed independently, or a (potentially empty) prefix + // which is printed before the cause's own message to construct the + // full message. This may contain PII. // // This is extracted automatically: // // - for wrappers that have a registered encoder, // - otherwise, when the wrapper's Error() has its cause's Error() as suffix. - string message_prefix = 2; + string message = 2; // The error details. EncodedErrorDetails details = 3 [(gogoproto.nullable) = false]; + + // message_type encodes the interpretation of `message`. Prior + // versions will not set this field and it will be left as `PREFIX`. + // This retains backwards compatibility since the new behavior is + // only enabled when this enum is set to `FULL_MESSAGE`. + MessageType message_type = 4; } // ErrorTypeMark identifies an error type for the purpose of determining @@ -98,3 +122,28 @@ message ErrorTypeMark { // RFC on error handling for details. string extension = 2; } + +// StringsPayload is used to encode the payload of certain error +// types. +message StringsPayload { + repeated string details = 1; +} + +// ErrnoPayload is used to encode the payload of syscall.Errno +// errors. +message ErrnoPayload { + // The original errno numeric code. + int64 orig_errno = 1; + // The platform where the syscall.Errno was encoded. This + // is needed because the numeric values of syscall.Errno + // have different meanings depending on the platform. + // When decoding, if the arch field does not match we + // use a substitute data type instead. + string arch = 2; + + bool is_permission = 3; + bool is_exist = 4; + bool is_not_exist = 5; + bool is_timeout = 6; + bool is_temporary = 7; +} diff --git a/errorspb/hintdetail.pb.go b/errorspb/hintdetail.pb.go index 7fe3681..7bb1ac6 100644 --- a/errorspb/hintdetail.pb.go +++ b/errorspb/hintdetail.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/cockroachdb/errors/errorspb/hintdetail.proto +// source: errorspb/hintdetail.proto package errorspb @@ -20,26 +20,24 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type StringPayload struct { - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` } func (m *StringPayload) Reset() { *m = StringPayload{} } func (m *StringPayload) String() string { return proto.CompactTextString(m) } func (*StringPayload) ProtoMessage() {} func (*StringPayload) Descriptor() ([]byte, []int) { - return fileDescriptor_eceb7593b9508b92, []int{0} + return fileDescriptor_d99b88ec9cc4bc22, []int{0} } func (m *StringPayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *StringPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -61,28 +59,25 @@ func init() { proto.RegisterType((*StringPayload)(nil), "cockroach.errorspb.StringPayload") } -func init() { - proto.RegisterFile("github.com/cockroachdb/errors/errorspb/hintdetail.proto", fileDescriptor_eceb7593b9508b92) -} +func init() { proto.RegisterFile("errorspb/hintdetail.proto", fileDescriptor_d99b88ec9cc4bc22) } -var fileDescriptor_eceb7593b9508b92 = []byte{ - // 152 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4f, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, - 0x48, 0x49, 0xd2, 0x4f, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0x86, 0x52, 0x05, 0x49, 0xfa, 0x19, 0x99, - 0x79, 0x25, 0x29, 0xa9, 0x25, 0x89, 0x99, 0x39, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x42, - 0x70, 0xd5, 0x7a, 0x30, 0x45, 0x4a, 0x8a, 0x5c, 0xbc, 0xc1, 0x25, 0x45, 0x99, 0x79, 0xe9, 0x01, - 0x89, 0x95, 0x39, 0xf9, 0x89, 0x29, 0x42, 0x02, 0x5c, 0xcc, 0xb9, 0xc5, 0xe9, 0x12, 0x8c, 0x0a, - 0x8c, 0x1a, 0x9c, 0x41, 0x20, 0xa6, 0x93, 0xd2, 0x89, 0x87, 0x72, 0x0c, 0x27, 0x1e, 0xc9, 0x31, - 0x5e, 0x78, 0x24, 0xc7, 0x78, 0xe3, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, - 0x31, 0x44, 0x71, 0xc0, 0x8c, 0x49, 0x62, 0x03, 0xdb, 0x60, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, - 0x7d, 0xc6, 0x8d, 0x40, 0x9c, 0x00, 0x00, 0x00, +var fileDescriptor_d99b88ec9cc4bc22 = []byte{ + // 143 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0x2d, 0x2a, 0xca, + 0x2f, 0x2a, 0x2e, 0x48, 0xd2, 0xcf, 0xc8, 0xcc, 0x2b, 0x49, 0x49, 0x2d, 0x49, 0xcc, 0xcc, 0xd1, + 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x4a, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, + 0xd0, 0x83, 0x29, 0x52, 0x52, 0xe4, 0xe2, 0x0d, 0x2e, 0x29, 0xca, 0xcc, 0x4b, 0x0f, 0x48, 0xac, + 0xcc, 0xc9, 0x4f, 0x4c, 0x11, 0x12, 0xe0, 0x62, 0xce, 0x2d, 0x4e, 0x97, 0x60, 0x54, 0x60, 0xd4, + 0xe0, 0x0c, 0x02, 0x31, 0x9d, 0xb4, 0x4e, 0x3c, 0x94, 0x63, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, + 0x23, 0x39, 0xc6, 0x1b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, + 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x38, 0x60, 0xc6, 0x25, 0xb1, 0x81, 0x6d, + 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xe2, 0xbd, 0x3a, 0x3e, 0x86, 0x00, 0x00, 0x00, } func (m *StringPayload) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -90,27 +85,35 @@ func (m *StringPayload) Marshal() (dAtA []byte, err error) { } func (m *StringPayload) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StringPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.Msg) > 0 { - dAtA[i] = 0xa - i++ + i -= len(m.Msg) + copy(dAtA[i:], m.Msg) i = encodeVarintHintdetail(dAtA, i, uint64(len(m.Msg))) - i += copy(dAtA[i:], m.Msg) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func encodeVarintHintdetail(dAtA []byte, offset int, v uint64) int { + offset -= sovHintdetail(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *StringPayload) Size() (n int) { if m == nil { @@ -198,10 +201,7 @@ func (m *StringPayload) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthHintdetail - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthHintdetail } if (iNdEx + skippy) > l { @@ -219,6 +219,7 @@ func (m *StringPayload) Unmarshal(dAtA []byte) error { func skipHintdetail(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -250,10 +251,8 @@ func skipHintdetail(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -274,55 +273,30 @@ func skipHintdetail(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthHintdetail } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthHintdetail - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowHintdetail - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipHintdetail(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthHintdetail - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupHintdetail + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthHintdetail + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthHintdetail = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowHintdetail = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthHintdetail = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowHintdetail = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupHintdetail = fmt.Errorf("proto: unexpected end of group") ) diff --git a/errorspb/markers.pb.go b/errorspb/markers.pb.go index a78e443..c19a3fb 100644 --- a/errorspb/markers.pb.go +++ b/errorspb/markers.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/cockroachdb/errors/errorspb/markers.proto +// source: errorspb/markers.proto package errorspb @@ -21,30 +21,28 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // MarkPayload is the error payload for a forced marker. // See errors/markers/markers.go and the RFC on // error handling for details. type MarkPayload struct { - Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` - Types []ErrorTypeMark `protobuf:"bytes,2,rep,name=types,proto3" json:"types"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Msg string `protobuf:"bytes,1,opt,name=msg,proto3" json:"msg,omitempty"` + Types []ErrorTypeMark `protobuf:"bytes,2,rep,name=types,proto3" json:"types"` } func (m *MarkPayload) Reset() { *m = MarkPayload{} } func (m *MarkPayload) String() string { return proto.CompactTextString(m) } func (*MarkPayload) ProtoMessage() {} func (*MarkPayload) Descriptor() ([]byte, []int) { - return fileDescriptor_5ac3bc232982be93, []int{0} + return fileDescriptor_84c3fd24ba37816d, []int{0} } func (m *MarkPayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *MarkPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -66,31 +64,29 @@ func init() { proto.RegisterType((*MarkPayload)(nil), "cockroach.errorspb.MarkPayload") } -func init() { - proto.RegisterFile("github.com/cockroachdb/errors/errorspb/markers.proto", fileDescriptor_5ac3bc232982be93) -} +func init() { proto.RegisterFile("errorspb/markers.proto", fileDescriptor_84c3fd24ba37816d) } -var fileDescriptor_5ac3bc232982be93 = []byte{ - // 207 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, - 0x48, 0x49, 0xd2, 0x4f, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0x86, 0x52, 0x05, 0x49, 0xfa, 0xb9, 0x89, - 0x45, 0xd9, 0xa9, 0x45, 0xc5, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x42, 0x70, 0xa5, 0x7a, - 0x30, 0x15, 0x52, 0xc6, 0x44, 0x9a, 0x04, 0x61, 0x40, 0x0c, 0x92, 0x12, 0x49, 0xcf, 0x4f, 0xcf, - 0x07, 0x33, 0xf5, 0x41, 0x2c, 0x88, 0xa8, 0x52, 0x1c, 0x17, 0xb7, 0x6f, 0x62, 0x51, 0x76, 0x40, - 0x62, 0x65, 0x4e, 0x7e, 0x62, 0x8a, 0x90, 0x00, 0x17, 0x73, 0x6e, 0x71, 0xba, 0x04, 0xa3, 0x02, - 0xa3, 0x06, 0x67, 0x10, 0x88, 0x29, 0x64, 0xcb, 0xc5, 0x5a, 0x52, 0x59, 0x90, 0x5a, 0x2c, 0xc1, - 0xa4, 0xc0, 0xac, 0xc1, 0x6d, 0xa4, 0xa8, 0x87, 0xe9, 0x1e, 0x3d, 0x57, 0x10, 0x23, 0xa4, 0xb2, - 0x20, 0x15, 0x64, 0x94, 0x13, 0xcb, 0x89, 0x7b, 0xf2, 0x0c, 0x41, 0x10, 0x5d, 0x4e, 0x4a, 0x27, - 0x1e, 0xca, 0x31, 0x9c, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x8d, 0x47, 0x72, 0x8c, - 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x10, 0xc5, 0x01, 0xd3, 0x9e, 0xc4, 0x06, 0x76, - 0x8a, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x84, 0xb7, 0x15, 0x21, 0x01, 0x00, 0x00, +var fileDescriptor_84c3fd24ba37816d = []byte{ + // 198 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0x2d, 0x2a, 0xca, + 0x2f, 0x2a, 0x2e, 0x48, 0xd2, 0xcf, 0x4d, 0x2c, 0xca, 0x4e, 0x2d, 0x2a, 0xd6, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0x12, 0x4a, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x83, 0xa9, + 0x90, 0x12, 0x85, 0xab, 0x85, 0x30, 0x20, 0x4a, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x4c, + 0x7d, 0x10, 0x0b, 0x22, 0xaa, 0x14, 0xc7, 0xc5, 0xed, 0x9b, 0x58, 0x94, 0x1d, 0x90, 0x58, 0x99, + 0x93, 0x9f, 0x98, 0x22, 0x24, 0xc0, 0xc5, 0x9c, 0x5b, 0x9c, 0x2e, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, + 0x19, 0x04, 0x62, 0x0a, 0xd9, 0x72, 0xb1, 0x96, 0x54, 0x16, 0xa4, 0x16, 0x4b, 0x30, 0x29, 0x30, + 0x6b, 0x70, 0x1b, 0x29, 0xea, 0x61, 0xda, 0xa8, 0xe7, 0x0a, 0x62, 0x84, 0x54, 0x16, 0xa4, 0x82, + 0x8c, 0x72, 0x62, 0x39, 0x71, 0x4f, 0x9e, 0x21, 0x08, 0xa2, 0xcb, 0x49, 0xeb, 0xc4, 0x43, 0x39, + 0x86, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0xbc, 0xf1, 0x48, 0x8e, 0xf1, 0xc1, 0x23, + 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x8a, + 0x03, 0x66, 0x4c, 0x12, 0x1b, 0xd8, 0x49, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x43, + 0x45, 0xef, 0xed, 0x00, 0x00, 0x00, } func (m *MarkPayload) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -98,39 +94,49 @@ func (m *MarkPayload) Marshal() (dAtA []byte, err error) { } func (m *MarkPayload) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MarkPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Msg) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintMarkers(dAtA, i, uint64(len(m.Msg))) - i += copy(dAtA[i:], m.Msg) - } if len(m.Types) > 0 { - for _, msg := range m.Types { - dAtA[i] = 0x12 - i++ - i = encodeVarintMarkers(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Types) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Types[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintMarkers(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0x12 } } - return i, nil + if len(m.Msg) > 0 { + i -= len(m.Msg) + copy(dAtA[i:], m.Msg) + i = encodeVarintMarkers(dAtA, i, uint64(len(m.Msg))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func encodeVarintMarkers(dAtA []byte, offset int, v uint64) int { + offset -= sovMarkers(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *MarkPayload) Size() (n int) { if m == nil { @@ -258,10 +264,7 @@ func (m *MarkPayload) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthMarkers - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthMarkers } if (iNdEx + skippy) > l { @@ -279,6 +282,7 @@ func (m *MarkPayload) Unmarshal(dAtA []byte) error { func skipMarkers(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -310,10 +314,8 @@ func skipMarkers(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -334,55 +336,30 @@ func skipMarkers(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthMarkers } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthMarkers - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowMarkers - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipMarkers(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthMarkers - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupMarkers + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthMarkers + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthMarkers = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowMarkers = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthMarkers = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowMarkers = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupMarkers = fmt.Errorf("proto: unexpected end of group") ) diff --git a/errorspb/markers.proto b/errorspb/markers.proto index 02ef1c8..3ea30ee 100644 --- a/errorspb/markers.proto +++ b/errorspb/markers.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package cockroach.errorspb; option go_package = "errorspb"; -import "github.com/cockroachdb/errors/errorspb/errors.proto"; +import "errorspb/errors.proto"; import "gogoproto/gogo.proto"; // MarkPayload is the error payload for a forced marker. diff --git a/errorspb/tags.pb.go b/errorspb/tags.pb.go index 7a25511..9fea3e6 100644 --- a/errorspb/tags.pb.go +++ b/errorspb/tags.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/cockroachdb/errors/errorspb/tags.proto +// source: errorspb/tags.proto package errorspb @@ -21,30 +21,28 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // TagsPayload is the error payload for a WithContext // marker. // See errors/contexttags/withcontext.go and the RFC on // error handling for details. type TagsPayload struct { - Tags []TagPayload `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Tags []TagPayload `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags"` } func (m *TagsPayload) Reset() { *m = TagsPayload{} } func (m *TagsPayload) String() string { return proto.CompactTextString(m) } func (*TagsPayload) ProtoMessage() {} func (*TagsPayload) Descriptor() ([]byte, []int) { - return fileDescriptor_5d76365188c23fe2, []int{0} + return fileDescriptor_2f0d1dc5c54e9f63, []int{0} } func (m *TagsPayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *TagsPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -63,24 +61,22 @@ func (m *TagsPayload) XXX_DiscardUnknown() { var xxx_messageInfo_TagsPayload proto.InternalMessageInfo type TagPayload struct { - Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (m *TagPayload) Reset() { *m = TagPayload{} } func (m *TagPayload) String() string { return proto.CompactTextString(m) } func (*TagPayload) ProtoMessage() {} func (*TagPayload) Descriptor() ([]byte, []int) { - return fileDescriptor_5d76365188c23fe2, []int{1} + return fileDescriptor_2f0d1dc5c54e9f63, []int{1} } func (m *TagPayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *TagPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -103,32 +99,29 @@ func init() { proto.RegisterType((*TagPayload)(nil), "cockroach.errorspb.TagPayload") } -func init() { - proto.RegisterFile("github.com/cockroachdb/errors/errorspb/tags.proto", fileDescriptor_5d76365188c23fe2) -} +func init() { proto.RegisterFile("errorspb/tags.proto", fileDescriptor_2f0d1dc5c54e9f63) } -var fileDescriptor_5d76365188c23fe2 = []byte{ - // 210 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4c, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, - 0x48, 0x49, 0xd2, 0x4f, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0x86, 0x52, 0x05, 0x49, 0xfa, 0x25, 0x89, - 0xe9, 0xc5, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x42, 0x70, 0x75, 0x7a, 0x30, 0x69, 0x29, - 0x91, 0xf4, 0xfc, 0xf4, 0x7c, 0xb0, 0xb4, 0x3e, 0x88, 0x05, 0x51, 0xa9, 0xe4, 0xce, 0xc5, 0x1d, - 0x92, 0x98, 0x5e, 0x1c, 0x90, 0x58, 0x99, 0x93, 0x9f, 0x98, 0x22, 0x64, 0xc1, 0xc5, 0x02, 0x32, - 0x46, 0x82, 0x51, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x4e, 0x0f, 0xd3, 0x1c, 0xbd, 0x90, 0xc4, 0x74, - 0xa8, 0x6a, 0x27, 0x96, 0x13, 0xf7, 0xe4, 0x19, 0x82, 0xc0, 0x3a, 0x94, 0x4c, 0xb8, 0xb8, 0x10, - 0x32, 0x42, 0x02, 0x5c, 0xcc, 0x25, 0x89, 0xe9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x20, - 0xa6, 0x90, 0x08, 0x17, 0x6b, 0x59, 0x62, 0x4e, 0x69, 0xaa, 0x04, 0x13, 0x58, 0x0c, 0xc2, 0x71, - 0x52, 0x3a, 0xf1, 0x50, 0x8e, 0xe1, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x6f, 0x3c, - 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x28, 0x0e, 0x98, 0x85, 0x49, - 0x6c, 0x60, 0x97, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x82, 0x3f, 0x04, 0x8e, 0x08, 0x01, - 0x00, 0x00, +var fileDescriptor_2f0d1dc5c54e9f63 = []byte{ + // 201 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4e, 0x2d, 0x2a, 0xca, + 0x2f, 0x2a, 0x2e, 0x48, 0xd2, 0x2f, 0x49, 0x4c, 0x2f, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x4a, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x83, 0x49, 0x4b, 0x89, 0xa4, + 0xe7, 0xa7, 0xe7, 0x83, 0xa5, 0xf5, 0x41, 0x2c, 0x88, 0x4a, 0x25, 0x77, 0x2e, 0xee, 0x90, 0xc4, + 0xf4, 0xe2, 0x80, 0xc4, 0xca, 0x9c, 0xfc, 0xc4, 0x14, 0x21, 0x0b, 0x2e, 0x16, 0x90, 0x31, 0x12, + 0x8c, 0x0a, 0xcc, 0x1a, 0xdc, 0x46, 0x72, 0x7a, 0x98, 0xe6, 0xe8, 0x85, 0x24, 0xa6, 0x43, 0x55, + 0x3b, 0xb1, 0x9c, 0xb8, 0x27, 0xcf, 0x10, 0x04, 0xd6, 0xa1, 0x64, 0xc2, 0xc5, 0x85, 0x90, 0x11, + 0x12, 0xe0, 0x62, 0x2e, 0x49, 0x4c, 0x97, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x02, 0x31, 0x85, + 0x44, 0xb8, 0x58, 0xcb, 0x12, 0x73, 0x4a, 0x53, 0x25, 0x98, 0xc0, 0x62, 0x10, 0x8e, 0x93, 0xd6, + 0x89, 0x87, 0x72, 0x0c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0x78, 0xe3, 0x91, 0x1c, + 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, + 0x1c, 0x43, 0x14, 0x07, 0xcc, 0xe2, 0x24, 0x36, 0xb0, 0x8b, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x0a, 0x90, 0xd1, 0xc9, 0xf2, 0x00, 0x00, 0x00, } func (m *TagsPayload) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -136,29 +129,36 @@ func (m *TagsPayload) Marshal() (dAtA []byte, err error) { } func (m *TagsPayload) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagsPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if len(m.Tags) > 0 { - for _, msg := range m.Tags { - dAtA[i] = 0xa - i++ - i = encodeVarintTags(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Tags) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Tags[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTags(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - return i, nil + return len(dAtA) - i, nil } func (m *TagPayload) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -166,33 +166,42 @@ func (m *TagPayload) Marshal() (dAtA []byte, err error) { } func (m *TagPayload) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TagPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if len(m.Tag) > 0 { - dAtA[i] = 0xa - i++ - i = encodeVarintTags(dAtA, i, uint64(len(m.Tag))) - i += copy(dAtA[i:], m.Tag) - } if len(m.Value) > 0 { - dAtA[i] = 0x12 - i++ + i -= len(m.Value) + copy(dAtA[i:], m.Value) i = encodeVarintTags(dAtA, i, uint64(len(m.Value))) - i += copy(dAtA[i:], m.Value) + i-- + dAtA[i] = 0x12 + } + if len(m.Tag) > 0 { + i -= len(m.Tag) + copy(dAtA[i:], m.Tag) + i = encodeVarintTags(dAtA, i, uint64(len(m.Tag))) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func encodeVarintTags(dAtA []byte, offset int, v uint64) int { + offset -= sovTags(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *TagsPayload) Size() (n int) { if m == nil { @@ -301,10 +310,7 @@ func (m *TagsPayload) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTags - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTags } if (iNdEx + skippy) > l { @@ -418,10 +424,7 @@ func (m *TagPayload) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTags - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTags } if (iNdEx + skippy) > l { @@ -439,6 +442,7 @@ func (m *TagPayload) Unmarshal(dAtA []byte) error { func skipTags(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -470,10 +474,8 @@ func skipTags(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -494,55 +496,30 @@ func skipTags(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthTags } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthTags - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTags - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipTags(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthTags - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTags + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthTags + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthTags = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTags = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthTags = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTags = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTags = fmt.Errorf("proto: unexpected end of group") ) diff --git a/errorspb/testing.pb.go b/errorspb/testing.pb.go index f75a0cb..fb9bd31 100644 --- a/errorspb/testing.pb.go +++ b/errorspb/testing.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: github.com/cockroachdb/errors/errorspb/testing.proto +// source: errorspb/testing.proto package errorspb @@ -20,26 +20,24 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // TestError is meant for use in testing only. type TestError struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` } func (m *TestError) Reset() { *m = TestError{} } func (m *TestError) String() string { return proto.CompactTextString(m) } func (*TestError) ProtoMessage() {} func (*TestError) Descriptor() ([]byte, []int) { - return fileDescriptor_5b5173a07163c41e, []int{0} + return fileDescriptor_0551f0d913d6118f, []int{0} } func (m *TestError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *TestError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } @@ -61,26 +59,24 @@ func init() { proto.RegisterType((*TestError)(nil), "cockroach.errorspb.TestError") } -func init() { - proto.RegisterFile("github.com/cockroachdb/errors/errorspb/testing.proto", fileDescriptor_5b5173a07163c41e) -} +func init() { proto.RegisterFile("errorspb/testing.proto", fileDescriptor_0551f0d913d6118f) } -var fileDescriptor_5b5173a07163c41e = []byte{ - // 127 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x49, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, - 0x48, 0x49, 0xd2, 0x4f, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0x86, 0x52, 0x05, 0x49, 0xfa, 0x25, 0xa9, - 0xc5, 0x25, 0x99, 0x79, 0xe9, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x42, 0x70, 0xa5, 0x7a, - 0x30, 0x15, 0x4a, 0xdc, 0x5c, 0x9c, 0x21, 0xa9, 0xc5, 0x25, 0xae, 0x20, 0xbe, 0x93, 0xd2, 0x89, - 0x87, 0x72, 0x0c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0x78, 0xe3, 0x91, 0x1c, 0xe3, - 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x44, 0x71, 0xc0, 0x34, 0x24, 0xb1, 0x81, 0xcd, - 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x19, 0xd6, 0xd6, 0x4f, 0x83, 0x00, 0x00, 0x00, +var fileDescriptor_0551f0d913d6118f = []byte{ + // 118 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0x2d, 0x2a, 0xca, + 0x2f, 0x2a, 0x2e, 0x48, 0xd2, 0x2f, 0x49, 0x2d, 0x2e, 0xc9, 0xcc, 0x4b, 0xd7, 0x2b, 0x28, 0xca, + 0x2f, 0xc9, 0x17, 0x12, 0x4a, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x83, 0xa9, + 0x50, 0xe2, 0xe6, 0xe2, 0x0c, 0x49, 0x2d, 0x2e, 0x71, 0x05, 0xf1, 0x9d, 0xb4, 0x4e, 0x3c, 0x94, + 0x63, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x1b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, + 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, + 0x38, 0x60, 0x1a, 0x93, 0xd8, 0xc0, 0x66, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4b, 0xf3, + 0x3e, 0x92, 0x6d, 0x00, 0x00, 0x00, } func (m *TestError) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -88,21 +84,28 @@ func (m *TestError) Marshal() (dAtA []byte, err error) { } func (m *TestError) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TestError) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - return i, nil + return len(dAtA) - i, nil } func encodeVarintTesting(dAtA []byte, offset int, v uint64) int { + offset -= sovTesting(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *TestError) Size() (n int) { if m == nil { @@ -154,10 +157,7 @@ func (m *TestError) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthTesting - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTesting } if (iNdEx + skippy) > l { @@ -175,6 +175,7 @@ func (m *TestError) Unmarshal(dAtA []byte) error { func skipTesting(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -206,10 +207,8 @@ func skipTesting(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -230,55 +229,30 @@ func skipTesting(dAtA []byte) (n int, err error) { return 0, ErrInvalidLengthTesting } iNdEx += length - if iNdEx < 0 { - return 0, ErrInvalidLengthTesting - } - return iNdEx, nil case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowTesting - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipTesting(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - if iNdEx < 0 { - return 0, ErrInvalidLengthTesting - } - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTesting + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthTesting + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthTesting = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowTesting = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthTesting = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTesting = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTesting = fmt.Errorf("proto: unexpected end of group") ) diff --git a/errutil/as.go b/errutil/as.go index bf45e45..ad2a8fc 100644 --- a/errutil/as.go +++ b/errutil/as.go @@ -58,7 +58,16 @@ func As(err error, target interface{}) bool { if x, ok := c.(interface{ As(interface{}) bool }); ok && x.As(target) { return true } + + // If at any point in the single cause chain including the top, + // we encounter a multi-cause chain, recursively explore it. + for _, cause := range errbase.UnwrapMulti(c) { + if As(cause, target) { + return true + } + } } + return false } diff --git a/errutil/as_test.go b/errutil/as_test.go index eaf3fdb..38d75be 100644 --- a/errutil/as_test.go +++ b/errutil/as_test.go @@ -15,6 +15,7 @@ package errutil_test import ( + goErr "errors" "fmt" "testing" @@ -53,6 +54,40 @@ func TestAs(t *testing.T) { mywSlot = nil tt.Check(errors.As(wwErr, &mywSlot)) tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in wrapError + multiWrapErr := fmt.Errorf("test %w test", errors.Wrap(refwErr, "hidden")) + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in multi-cause wrapErrors + multiWrapErr = fmt.Errorf("error: %w and %w", errors.Wrap(refwErr, "hidden"), errors.New("world")) + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in custom multi-error + multiWrapErr = &myMultiWrapper{ + causes: []error{errors.Wrap(refwErr, "hidden"), errors.New("world")}, + msg: "errors", + } + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) + + // Check that it works even if hidden in a multi-level multi-cause chain + multiWrapErr = fmt.Errorf("error: %w and %w", + &myMultiWrapper{ + causes: []error{errors.New("ignoreme"), errors.New("also ignore")}, + msg: "red herring", + }, &myMultiWrapper{ + causes: []error{errors.Wrap(refwErr, "hidden"), errors.New("world")}, + msg: "errors", + }) + mywSlot = nil + tt.Check(errors.As(multiWrapErr, &mywSlot)) + tt.Check(errors.Is(mywSlot, refwErr)) } type myType struct{ msg string } @@ -65,3 +100,14 @@ type myWrapper struct { } func (m *myWrapper) Error() string { return fmt.Sprintf("%s: %v", m.msg, m.cause) } + +type myMultiWrapper struct { + causes []error + msg string +} + +func (m *myMultiWrapper) Error() string { return fmt.Sprintf("%s: %v", m.msg, goErr.Join(m.causes...)) } + +func (m *myMultiWrapper) Unwrap() []error { + return m.causes +} diff --git a/errutil/doc.go b/errutil/doc.go index 795c06c..3ae970f 100644 --- a/errutil/doc.go +++ b/errutil/doc.go @@ -14,6 +14,6 @@ // Package errutil combines primitives from the library, the Go errors // package and github.com/pkg/errors. It aims to serve as drop-in -// replacement to gitub.com/pkg/errors and replace the legacy +// replacement to github.com/pkg/errors and replace the legacy // implementation of `pgerrors`. package errutil diff --git a/errutil/fmt_wrap_test.go b/errutil/fmt_wrap_test.go deleted file mode 100644 index 9331aa3..0000000 --- a/errutil/fmt_wrap_test.go +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2019 The Cockroach Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. - -// +build go1.13 - -package errutil_test - -import ( - "fmt" - "strings" - "testing" - - "github.com/cockroachdb/errors/errutil" - "github.com/cockroachdb/errors/testutils" -) - -func TestErrorWrap(t *testing.T) { - tt := testutils.T{t} - - baseErr := errutil.New("world") - - testCases := []struct { - name string - err error - expFmtSimple string - expFmtVerbose string - }{ - {"fmt wrap err", - fmt.Errorf("hello: %w", baseErr), - `hello: world`, - // This fails to reveal the errors details because - // fmt.Error's error objects do not implement a full %+v. - `hello: world`}, - - {"fmt rewrap err", - errutil.Wrap(fmt.Errorf("hello: %w", baseErr), "woo"), - `woo: hello: world`, - // However, ours do. - `woo: hello: world -(1) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestErrorWrap - | - | [...repeated from below...] -Wraps: (2) woo -Wraps: (3) hello -Wraps: (4) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestErrorWrap - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (5) world -Error types: (1) *withstack.withStack (2) *errutil.withMessage (3) *fmt.wrapError (4) *withstack.withStack (5) *errors.errorString`}, - - {"new wrap err", - errutil.Newf("hello: %w", baseErr), - `hello: world`, - `hello: world -(1) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestErrorWrap - | - | [...repeated from below...] -Wraps: (2) 2 safe details enclosed -Wraps: (3) hello -Wraps: (4) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestErrorWrap - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (5) world -Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *fmt.wrapError (4) *withstack.withStack (5) *errors.errorString`}, - } - - for _, test := range testCases { - tt.Run(test.name, func(tt testutils.T) { - err := test.err - - // %s is simple formatting - tt.CheckStringEqual(fmt.Sprintf("%s", err), test.expFmtSimple) - - // %v is simple formatting too, for compatibility with the past. - tt.CheckStringEqual(fmt.Sprintf("%v", err), test.expFmtSimple) - - // %q is always like %s but quotes the result. - ref := fmt.Sprintf("%q", test.expFmtSimple) - tt.CheckStringEqual(fmt.Sprintf("%q", err), ref) - - // %+v is the verbose mode. - refV := strings.TrimPrefix(test.expFmtVerbose, "\n") - spv := fmt.Sprintf("%+v", err) - spv = fileref.ReplaceAllString(spv, "") - spv = strings.ReplaceAll(spv, "\t", "") - tt.CheckStringEqual(spv, refV) - }) - } -} diff --git a/errutil/format_error_special.go b/errutil/format_error_special.go new file mode 100644 index 0000000..fa75488 --- /dev/null +++ b/errutil/format_error_special.go @@ -0,0 +1,88 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package errutil + +import ( + "context" + "net" + "os" + "runtime" + "syscall" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/markers" + "github.com/cockroachdb/redact" +) + +func init() { + errbase.RegisterSpecialCasePrinter(specialCaseFormat) +} + +func specialCaseFormat(err error, p errbase.Printer, isLeaf bool) (handled bool, next error) { + if isLeaf && markers.IsAny(err, + context.DeadlineExceeded, + context.Canceled, + os.ErrInvalid, + os.ErrPermission, + os.ErrExist, + os.ErrNotExist, + os.ErrClosed, + os.ErrNoDeadline) { + p.Print(redact.Safe(err.Error())) + return true, nil + } + + switch v := err.(type) { + // The following two types are safe too. + case runtime.Error: + p.Print(redact.Safe(v.Error())) + return true, err + case syscall.Errno: + p.Print(redact.Safe(v.Error())) + return true, err + case *os.SyscallError: + p.Print(redact.Safe(v.Syscall)) + return true, err + case *os.PathError: + p.Printf("%s %s", redact.Safe(v.Op), v.Path) + return true, err + case *os.LinkError: + p.Printf("%s %s %s", redact.Safe(v.Op), v.Old, v.New) + return true, err + case *net.OpError: + p.Print(redact.Safe(v.Op)) + if v.Net != "" { + p.Printf(" %s", redact.Safe(v.Net)) + } + if v.Source != nil { + p.Printf(" %s", v.Source) + } + if v.Addr != nil { + if v.Source != nil { + p.Printf(" ->") + } + p.Printf(" %s", v.Addr) + } + return true, err + case redact.SafeMessager: + // Backward-compatibility with previous versions + // of the errors library: if an error type implements + // SafeMessage(), use that instead of its error message. + p.Print(redact.Safe(v.SafeMessage())) + // It also short-cuts any further causes. + return true, nil + } + return false, nil +} diff --git a/errutil/message.go b/errutil/message.go index 4d2599b..2ee60b8 100644 --- a/errutil/message.go +++ b/errutil/message.go @@ -14,61 +14,32 @@ package errutil -import ( - "context" - "fmt" - - "github.com/cockroachdb/errors/errbase" - "github.com/gogo/protobuf/proto" -) +import "github.com/cockroachdb/redact" // WithMessage annotates err with a new message. // If err is nil, WithMessage returns nil. +// The message is considered safe for reporting +// and is included in Sentry reports. func WithMessage(err error, message string) error { if err == nil { return nil } - return &withMessage{ - cause: err, - msg: message, + return &withPrefix{ + cause: err, + prefix: redact.Sprint(redact.Safe(message)), } } // WithMessagef annotates err with the format specifier. // If err is nil, WithMessagef returns nil. +// The message is formatted as per redact.Sprintf, +// to separate safe and unsafe strings for Sentry reporting. func WithMessagef(err error, format string, args ...interface{}) error { if err == nil { return nil } - return &withMessage{ - cause: err, - msg: fmt.Sprintf(format, args...), + return &withPrefix{ + cause: err, + prefix: redact.Sprintf(format, args...), } } - -type withMessage struct { - cause error - msg string -} - -func (w *withMessage) Error() string { return fmt.Sprintf("%s: %v", w.msg, w.cause) } -func (w *withMessage) Cause() error { return w.cause } -func (w *withMessage) Unwrap() error { return w.cause } - -func (w *withMessage) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *withMessage) FormatError(p errbase.Printer) (next error) { - p.Print(w.msg) - return w.cause -} - -// A message wrapper is decoded exactly. -func decodeMessage( - ctx context.Context, cause error, msg string, _ []string, _ proto.Message, -) error { - return &withMessage{cause: cause, msg: msg} -} - -func init() { - tn := errbase.GetTypeKey((*withMessage)(nil)) - errbase.RegisterWrapperDecoder(tn, decodeMessage) -} diff --git a/errutil/message_test.go b/errutil/message_test.go index a612cfe..0a7311d 100644 --- a/errutil/message_test.go +++ b/errutil/message_test.go @@ -26,6 +26,8 @@ import ( "github.com/cockroachdb/errors/testutils" ) +// TestFormat checks edge cases of the utilities in this package. +// More tests are exercised in the "fmttests" package. func TestFormat(t *testing.T) { tt := testutils.T{t} @@ -35,42 +37,12 @@ func TestFormat(t *testing.T) { expFmtSimple string expFmtVerbose string }{ - {"fmt wrap + local msg + fmt leaf", - &werrFmt{ - errutil.WithMessage( - goErr.New("woo"), "waa"), - "wuu"}, - `wuu: waa: woo`, ` -wuu: waa: woo -(1) wuu - | -- this is wuu's - | multi-line payload -Wraps: (2) waa -Wraps: (3) woo -Error types: (1) *errutil_test.werrFmt (2) *errutil.withMessage (3) *errors.errorString`, - }, - - {"newf", - errutil.Newf("waa: %s", "hello"), - `waa: hello`, ` -waa: hello -(1) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (2) 2 safe details enclosed -Wraps: (3) waa: hello -Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *errors.errorString`, - }, - {"newf-empty", errutil.Newf(emptyString), ``, ` (1) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner @@ -78,7 +50,7 @@ Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *erro | runtime.goexit | Wraps: (2) -Error types: (1) *withstack.withStack (2) *errors.errorString`, +Error types: (1) *withstack.withStack (2) *errutil.leafError`, }, {"newf-empty-arg", @@ -86,32 +58,15 @@ Error types: (1) *withstack.withStack (2) *errors.errorString`, `%!(EXTRA int=123)`, ` %!(EXTRA int=123) (1) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner | | runtime.goexit | -Wraps: (2) 2 safe details enclosed -Wraps: (3) %!(EXTRA int=123) -Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *errors.errorString`, - }, - - {"wrapf", - errutil.Wrapf(goErr.New("woo"), "waa: %s", "hello"), - `waa: hello: woo`, ` -waa: hello: woo -(1) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (2) 2 safe details enclosed -Wraps: (3) waa: hello -Wraps: (4) woo -Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *errutil.withMessage (4) *errors.errorString`, +Wraps: (2) %!(EXTRA int=123) +Error types: (1) *withstack.withStack (2) *errutil.leafError`, }, {"wrapf-empty", @@ -119,6 +74,7 @@ Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *erru `woo`, ` woo (1) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner @@ -134,40 +90,16 @@ Error types: (1) *withstack.withStack (2) *errors.errorString`, `%!(EXTRA int=123): woo`, ` %!(EXTRA int=123): woo (1) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner | | runtime.goexit | -Wraps: (2) 2 safe details enclosed -Wraps: (3) %!(EXTRA int=123) -Wraps: (4) woo -Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *errutil.withMessage (4) *errors.errorString`, - }, - - {"handled assert", - errutil.HandleAsAssertionFailure(&werrFmt{goErr.New("woo"), "wuu"}), - `wuu: woo`, - ` -wuu: woo -(1) assertion failure -Wraps: (2) attached stack trace - | github.com/cockroachdb/errors/errutil_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (3) wuu: woo - | -- cause hidden behind barrier - | wuu: woo - | (1) wuu - | | -- this is wuu's - | | multi-line payload - | Wraps: (2) woo - | Error types: (1) *errutil_test.werrFmt (2) *errors.errorString -Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierError`, +Wraps: (2) %!(EXTRA int=123) +Wraps: (3) woo +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.errorString`, }, {"assert + wrap", @@ -176,15 +108,15 @@ Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barr waa: hello: wuu: woo (1) assertion failure Wraps: (2) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner | | runtime.goexit | -Wraps: (3) 2 safe details enclosed -Wraps: (4) waa: hello -Wraps: (5) wuu: woo +Wraps: (3) waa: hello +Wraps: (4) wuu: woo | -- cause hidden behind barrier | wuu: woo | (1) wuu @@ -192,7 +124,7 @@ Wraps: (5) wuu: woo | | multi-line payload | Wraps: (2) woo | Error types: (1) *errutil_test.werrFmt (2) *errors.errorString -Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *safedetails.withSafeDetails (4) *errutil.withMessage (5) *barriers.barrierError`, +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr`, }, {"assert + wrap empty", @@ -201,6 +133,7 @@ Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *safe wuu: woo (1) assertion failure Wraps: (2) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner @@ -215,7 +148,7 @@ Wraps: (3) wuu: woo | | multi-line payload | Wraps: (2) woo | Error types: (1) *errutil_test.werrFmt (2) *errors.errorString -Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierError`, +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr`, }, {"assert + wrap empty+arg", @@ -224,15 +157,15 @@ Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barr %!(EXTRA int=123): wuu: woo (1) assertion failure Wraps: (2) attached stack trace + -- stack trace: | github.com/cockroachdb/errors/errutil_test.TestFormat | | testing.tRunner | | runtime.goexit | -Wraps: (3) 2 safe details enclosed -Wraps: (4) %!(EXTRA int=123) -Wraps: (5) wuu: woo +Wraps: (3) %!(EXTRA int=123) +Wraps: (4) wuu: woo | -- cause hidden behind barrier | wuu: woo | (1) wuu @@ -240,7 +173,7 @@ Wraps: (5) wuu: woo | | multi-line payload | Wraps: (2) woo | Error types: (1) *errutil_test.werrFmt (2) *errors.errorString -Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *safedetails.withSafeDetails (4) *errutil.withMessage (5) *barriers.barrierError`, +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr`, }, } diff --git a/errutil/redactable.go b/errutil/redactable.go new file mode 100644 index 0000000..6d34f25 --- /dev/null +++ b/errutil/redactable.go @@ -0,0 +1,163 @@ +package errutil + +import ( + "context" + "fmt" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/errorspb" + "github.com/cockroachdb/redact" + "github.com/gogo/protobuf/proto" +) + +// leafError is like the basic error string in the stdlib except the +// message can contain redactable and non-redactable parts. +type leafError struct { + msg redact.RedactableString +} + +var _ error = (*leafError)(nil) +var _ fmt.Formatter = (*leafError)(nil) +var _ errbase.SafeFormatter = (*leafError)(nil) +var _ errbase.SafeDetailer = (*leafError)(nil) + +func (l *leafError) Error() string { return l.msg.StripMarkers() } +func (l *leafError) Format(s fmt.State, verb rune) { errbase.FormatError(l, s, verb) } +func (l *leafError) SafeFormatError(p errbase.Printer) (next error) { + p.Print(l.msg) + return nil +} +func (l *leafError) SafeDetails() []string { + return []string{l.msg.Redact().StripMarkers()} +} + +func encodeLeaf(_ context.Context, err error) (string, []string, proto.Message) { + l := err.(*leafError) + return l.Error(), l.SafeDetails(), &errorspb.StringPayload{Msg: string(l.msg)} +} + +func decodeLeaf(_ context.Context, _ string, _ []string, payload proto.Message) error { + m, ok := payload.(*errorspb.StringPayload) + if !ok { + // If this ever happens, this means some version of the library + // (presumably future) changed the payload type, and we're + // receiving this here. In this case, give up and let + // DecodeError use the opaque type. + return nil + } + return &leafError{msg: redact.RedactableString(m.Msg)} +} + +func init() { + errbase.RegisterLeafEncoder(errbase.GetTypeKey((*leafError)(nil)), encodeLeaf) + errbase.RegisterLeafDecoder(errbase.GetTypeKey((*leafError)(nil)), decodeLeaf) +} + +// withPrefix is like withMessage but the +// message can contain redactable and non-redactable parts. +type withPrefix struct { + cause error + prefix redact.RedactableString +} + +var _ error = (*withPrefix)(nil) +var _ fmt.Formatter = (*withPrefix)(nil) +var _ errbase.SafeFormatter = (*withPrefix)(nil) +var _ errbase.SafeDetailer = (*withPrefix)(nil) + +func (l *withPrefix) Error() string { + if l.prefix == "" { + return l.cause.Error() + } + return fmt.Sprintf("%s: %v", l.prefix.StripMarkers(), l.cause) +} + +func (l *withPrefix) Cause() error { return l.cause } +func (l *withPrefix) Unwrap() error { return l.cause } + +func (l *withPrefix) Format(s fmt.State, verb rune) { errbase.FormatError(l, s, verb) } +func (l *withPrefix) SafeFormatError(p errbase.Printer) (next error) { + p.Print(l.prefix) + return l.cause +} + +func (l *withPrefix) SafeDetails() []string { + return []string{l.prefix.Redact().StripMarkers()} +} + +func encodeWithPrefix(_ context.Context, err error) (string, []string, proto.Message) { + l := err.(*withPrefix) + return l.Error(), l.SafeDetails(), &errorspb.StringPayload{Msg: string(l.prefix)} +} + +func decodeWithPrefix( + _ context.Context, cause error, _ string, _ []string, payload proto.Message, +) error { + m, ok := payload.(*errorspb.StringPayload) + if !ok { + // If this ever happens, this means some version of the library + // (presumably future) changed the payload type, and we're + // receiving this here. In this case, give up and let + // DecodeError use the opaque type. + return nil + } + return &withPrefix{cause: cause, prefix: redact.RedactableString(m.Msg)} +} + +func init() { + errbase.RegisterWrapperEncoder(errbase.GetTypeKey((*withPrefix)(nil)), encodeWithPrefix) + errbase.RegisterWrapperDecoder(errbase.GetTypeKey((*withPrefix)(nil)), decodeWithPrefix) +} + +// withNewMessage is like withPrefix but the message completely +// overrides that of the underlying error. +type withNewMessage struct { + cause error + message redact.RedactableString +} + +var _ error = (*withNewMessage)(nil) +var _ fmt.Formatter = (*withNewMessage)(nil) +var _ errbase.SafeFormatter = (*withNewMessage)(nil) +var _ errbase.SafeDetailer = (*withNewMessage)(nil) + +func (l *withNewMessage) Error() string { + return l.message.StripMarkers() +} + +func (l *withNewMessage) Cause() error { return l.cause } +func (l *withNewMessage) Unwrap() error { return l.cause } + +func (l *withNewMessage) Format(s fmt.State, verb rune) { errbase.FormatError(l, s, verb) } +func (l *withNewMessage) SafeFormatError(p errbase.Printer) (next error) { + p.Print(l.message) + return nil /* nil here overrides the cause's message */ +} + +func (l *withNewMessage) SafeDetails() []string { + return []string{l.message.Redact().StripMarkers()} +} + +func encodeWithNewMessage(_ context.Context, err error) (string, []string, proto.Message) { + l := err.(*withNewMessage) + return l.Error(), l.SafeDetails(), &errorspb.StringPayload{Msg: string(l.message)} +} + +func decodeWithNewMessage( + _ context.Context, cause error, _ string, _ []string, payload proto.Message, +) error { + m, ok := payload.(*errorspb.StringPayload) + if !ok { + // If this ever happens, this means some version of the library + // (presumably future) changed the payload type, and we're + // receiving this here. In this case, give up and let + // DecodeError use the opaque type. + return nil + } + return &withNewMessage{cause: cause, message: redact.RedactableString(m.Msg)} +} + +func init() { + errbase.RegisterWrapperEncoder(errbase.GetTypeKey((*withNewMessage)(nil)), encodeWithNewMessage) + errbase.RegisterWrapperDecoder(errbase.GetTypeKey((*withNewMessage)(nil)), decodeWithNewMessage) +} diff --git a/errutil/utilities.go b/errutil/utilities.go index 28e1ed2..78e4d20 100644 --- a/errutil/utilities.go +++ b/errutil/utilities.go @@ -15,21 +15,25 @@ package errutil import ( - goErr "errors" - "fmt" - - "github.com/cockroachdb/errors/safedetails" + "github.com/cockroachdb/errors/join" + "github.com/cockroachdb/errors/secondary" "github.com/cockroachdb/errors/withstack" + "github.com/cockroachdb/redact" ) // New creates an error with a simple error message. // A stack trace is retained. // +// Note: the message string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Newf("%s", ) for errors +// strings that may contain PII information. +// // Detail output: // - message via `Error()` and formatting using `%v`/`%s`/`%q`. // - everything when formatting with `%+v`. -// - stack trace (not message) via `errors.GetSafeDetails()`. -// - stack trace (not message) in Sentry reports. +// - stack trace and message via `errors.GetSafeDetails()`. +// - stack trace and message in Sentry reports. func New(msg string) error { return NewWithDepth(1, msg) } @@ -38,13 +42,19 @@ func New(msg string) error { // trace is configurable. // See the doc of `New()` for more details. func NewWithDepth(depth int, msg string) error { - err := goErr.New(msg) + err := error(&leafError{redact.Sprint(redact.Safe(msg))}) err = withstack.WithStackDepth(err, 1+depth) return err } // Newf creates an error with a formatted error message. // A stack trace is retained. +// +// Note: the format string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Newf("%s", ) for errors +// strings that may contain PII information. +// // See the doc of `New()` for more details. func Newf(format string, args ...interface{}) error { return NewWithDepthf(1, format, args...) @@ -54,9 +64,25 @@ func Newf(format string, args ...interface{}) error { // trace is configurable. // See the doc of `New()` for more details. func NewWithDepthf(depth int, format string, args ...interface{}) error { - err := fmt.Errorf(format, args...) - if format != "" || len(args) > 0 { - err = safedetails.WithSafeDetails(err, format, args...) + // If there's the verb %w in here, shortcut to fmt.Errorf() + // and store the safe details as extra payload. That's + // because we don't want to re-implement the error wrapping + // logic from 'fmt' in there. + var err error + var errRefs []error + for _, a := range args { + if e, ok := a.(error); ok { + errRefs = append(errRefs, e) + } + } + redactable, wrappedErr := redact.HelperForErrorf(format, args...) + if wrappedErr != nil { + err = &withNewMessage{cause: wrappedErr, message: redactable} + } else { + err = &leafError{redactable} + } + for _, e := range errRefs { + err = secondary.WithSecondaryError(err, e) } err = withstack.WithStackDepth(err, 1+depth) return err @@ -65,11 +91,16 @@ func NewWithDepthf(depth int, format string, args ...interface{}) error { // Wrap wraps an error with a message prefix. // A stack trace is retained. // +// Note: the prefix string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Wrapf(err, "%s", ) for errors +// strings that may contain PII information. +// // Detail output: // - original error message + prefix via `Error()` and formatting using `%v`/`%s`/`%q`. // - everything when formatting with `%+v`. -// - stack trace (not message) via `errors.GetSafeDetails()`. -// - stack trace (not message) in Sentry reports. +// - stack trace and message via `errors.GetSafeDetails()`. +// - stack trace and message in Sentry reports. func Wrap(err error, msg string) error { return WrapWithDepth(1, err, msg) } @@ -78,6 +109,9 @@ func Wrap(err error, msg string) error { // trace is configurable. // The the doc of `Wrap()` for more details. func WrapWithDepth(depth int, err error, msg string) error { + if err == nil { + return nil + } if msg != "" { err = WithMessage(err, msg) } @@ -89,11 +123,16 @@ func WrapWithDepth(depth int, err error, msg string) error { // trace is also retained. If the format is empty, no prefix is added, // but the extra arguments are still processed for reportable strings. // +// Note: the format string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Wrapf(err, "%s", ) for errors +// strings that may contain PII information. +// // Detail output: // - original error message + prefix via `Error()` and formatting using `%v`/`%s`/`%q`. // - everything when formatting with `%+v`. -// - stack trace (not message) and redacted details via `errors.GetSafeDetails()`. -// - stack trace (not message) and redacted details in Sentry reports. +// - stack trace, format, and redacted details via `errors.GetSafeDetails()`. +// - stack trace, format, and redacted details in Sentry reports. func Wrapf(err error, format string, args ...interface{}) error { return WrapWithDepthf(1, err, format, args...) } @@ -102,10 +141,28 @@ func Wrapf(err error, format string, args ...interface{}) error { // trace is configurable. // The the doc of `Wrapf()` for more details. func WrapWithDepthf(depth int, err error, format string, args ...interface{}) error { + if err == nil { + return nil + } + var errRefs []error + for _, a := range args { + if e, ok := a.(error); ok { + errRefs = append(errRefs, e) + } + } if format != "" || len(args) > 0 { err = WithMessagef(err, format, args...) - err = safedetails.WithSafeDetails(err, format, args...) + } + for _, e := range errRefs { + err = secondary.WithSecondaryError(err, e) } err = withstack.WithStackDepth(err, depth+1) return err } + +// JoinWithDepth constructs a Join error with the provided list of +// errors as arguments, and wraps it in a `WithStackDepth` to capture a +// stacktrace alongside. +func JoinWithDepth(depth int, errs ...error) error { + return withstack.WithStackDepth(join.Join(errs...), depth+1) +} diff --git a/errutil_api.go b/errutil_api.go index 9deae51..166eee1 100644 --- a/errutil_api.go +++ b/errutil_api.go @@ -15,105 +15,196 @@ package errors import ( - "fmt" - "github.com/cockroachdb/errors/barriers" "github.com/cockroachdb/errors/errbase" "github.com/cockroachdb/errors/errutil" ) -// New forwards a definition. +// New creates an error with a simple error message. +// A stack trace is retained. +// +// Note: the message string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Newf("%s", ) for errors +// strings that may contain PII information. +// +// Detail output: +// - message via `Error()` and formatting using `%v`/`%s`/`%q`. +// - everything when formatting with `%+v`. +// - stack trace and message via `errors.GetSafeDetails()`. +// - stack trace and message in Sentry reports. func New(msg string) error { return errutil.NewWithDepth(1, msg) } -// NewWithDepth forwards a definition. +// NewWithDepth is like New() except the depth to capture the stack +// trace is configurable. +// See the doc of `New()` for more details. func NewWithDepth(depth int, msg string) error { return errutil.NewWithDepth(depth+1, msg) } -// Newf forwards a definition. +// Newf creates an error with a formatted error message. +// A stack trace is retained. +// +// Note: the format string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Newf("%s", ) for errors +// strings that may contain PII information. +// +// See the doc of `New()` for more details. func Newf(format string, args ...interface{}) error { return errutil.NewWithDepthf(1, format, args...) } -// NewWithDepthf forwards a definition. +// NewWithDepthf is like Newf() except the depth to capture the stack +// trace is configurable. +// See the doc of `New()` for more details. func NewWithDepthf(depth int, format string, args ...interface{}) error { return errutil.NewWithDepthf(depth+1, format, args...) } -// Errorf forwards a definition. +// Errorf aliases Newf(). func Errorf(format string, args ...interface{}) error { return errutil.NewWithDepthf(1, format, args...) } -// Cause is provided for compatibility with github.com/pkg/errors. +// Cause aliases UnwrapAll() for compatibility with github.com/pkg/errors. func Cause(err error) error { return errbase.UnwrapAll(err) } -// Unwrap is provided for compatibility with xerrors. +// Unwrap aliases UnwrapOnce() for compatibility with xerrors. func Unwrap(err error) error { return errbase.UnwrapOnce(err) } -// Wrapper is provided for compatibility with xerrors. +// Wrapper is the type of an error wrapper. type Wrapper interface { Unwrap() error } -// Formatter is provided for compatibility with xerrors. -type Formatter = errbase.Formatter - -// Printer is provided for compatibility with xerrors. -type Printer = errbase.Printer - -// FormatError can be used to implement the fmt.Formatter interface. -func FormatError(err error, s fmt.State, verb rune) { errbase.FormatError(err, s, verb) } - -// Opaque is provided for compatibility with xerrors. +// Opaque aliases barrier.Handled(), for compatibility with xerrors. func Opaque(err error) error { return barriers.Handled(err) } -// WithMessage forwards a definition. +// WithMessage annotates err with a new message. +// If err is nil, WithMessage returns nil. +// The message is considered safe for reporting +// and is included in Sentry reports. func WithMessage(err error, msg string) error { return errutil.WithMessage(err, msg) } -// WithMessagef forwards a definition. +// WithMessagef annotates err with the format specifier. +// If err is nil, WithMessagef returns nil. +// The message is formatted as per redact.Sprintf, +// to separate safe and unsafe strings for Sentry reporting. func WithMessagef(err error, format string, args ...interface{}) error { return errutil.WithMessagef(err, format, args...) } -// Wrap forwards a definition. +// Wrap wraps an error with a message prefix. +// A stack trace is retained. +// +// Note: the prefix string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Wrapf(err, "%s", ) for errors +// strings that may contain PII information. +// +// Detail output: +// - original error message + prefix via `Error()` and formatting using `%v`/`%s`/`%q`. +// - everything when formatting with `%+v`. +// - stack trace and message via `errors.GetSafeDetails()`. +// - stack trace and message in Sentry reports. func Wrap(err error, msg string) error { return errutil.WrapWithDepth(1, err, msg) } -// WrapWithDepth forwards a definition. +// WrapWithDepth is like Wrap except the depth to capture the stack +// trace is configurable. +// The the doc of `Wrap()` for more details. func WrapWithDepth(depth int, err error, msg string) error { return errutil.WrapWithDepth(depth+1, err, msg) } -// Wrapf forwards a definition. +// Wrapf wraps an error with a formatted message prefix. A stack +// trace is also retained. If the format is empty, no prefix is added, +// but the extra arguments are still processed for reportable strings. +// +// Note: the format string is assumed to not contain +// PII and is included in Sentry reports. +// Use errors.Wrapf(err, "%s", ) for errors +// strings that may contain PII information. +// +// Detail output: +// - original error message + prefix via `Error()` and formatting using `%v`/`%s`/`%q`. +// - everything when formatting with `%+v`. +// - stack trace, format, and redacted details via `errors.GetSafeDetails()`. +// - stack trace, format, and redacted details in Sentry reports. func Wrapf(err error, format string, args ...interface{}) error { return errutil.WrapWithDepthf(1, err, format, args...) } -// WrapWithDepthf forwards a definition. +// WrapWithDepthf is like Wrapf except the depth to capture the stack +// trace is configurable. +// The the doc of `Wrapf()` for more details. func WrapWithDepthf(depth int, err error, format string, args ...interface{}) error { return errutil.WrapWithDepthf(depth+1, err, format, args...) } -// AssertionFailedf forwards a definition. +// AssertionFailedf creates an internal error. +// +// Detail is shown: +// - via `errors.GetSafeDetails()`, shows redacted strings. +// - when formatting with `%+v`. +// - in Sentry reports. func AssertionFailedf(format string, args ...interface{}) error { return errutil.AssertionFailedWithDepthf(1, format, args...) } -// AssertionFailedWithDepthf forwards a definition. +// AssertionFailedWithDepthf creates an internal error +// with a stack trace collected at the specified depth. +// See the doc of `AssertionFailedf()` for more details. func AssertionFailedWithDepthf(depth int, format string, args ...interface{}) error { return errutil.AssertionFailedWithDepthf(depth+1, format, args...) } -// NewAssertionErrorWithWrappedErrf forwards a definition. +// NewAssertionErrorWithWrappedErrf wraps an error and turns it into +// an assertion error. Both details from the original error and the +// context of the caller are preserved. The original error is not +// visible as cause any more. The original error message is preserved. +// See the doc of `AssertionFailedf()` for more details. func NewAssertionErrorWithWrappedErrf(origErr error, format string, args ...interface{}) error { return errutil.NewAssertionErrorWithWrappedErrDepthf(1, origErr, format, args...) } -// HandleAsAssertionFailure forwards a definition. +// HandleAsAssertionFailure hides an error and turns it into +// an assertion failure. Both details from the original error and the +// context of the caller are preserved. The original error is not +// visible as cause any more. The original error message is preserved. +// See the doc of `AssertionFailedf()` for more details. func HandleAsAssertionFailure(origErr error) error { return errutil.HandleAsAssertionFailureDepth(1, origErr) } -// HandleAsAssertionFailureDepth forwards a definition. +// HandleAsAssertionFailureDepth is like HandleAsAssertionFailure but +// the depth at which the call stack is captured can be specified. func HandleAsAssertionFailureDepth(depth int, origErr error) error { return errutil.HandleAsAssertionFailureDepth(1+depth, origErr) } -// As forwards a definition +// As finds the first error in err's chain that matches the type to which target +// points, and if so, sets the target to its value and returns true. An error +// matches a type if it is assignable to the target type, or if it has a method +// As(interface{}) bool such that As(target) returns true. As will panic if target +// is not a non-nil pointer to a type which implements error or is of interface type. +// +// The As method should set the target to its value and return true if err +// matches the type to which target points. +// +// Note: this implementation differs from that of xerrors as follows: +// - it also supports recursing through causes with Cause(). +// - if it detects an API use error, its panic object is a valid error. func As(err error, target interface{}) bool { return errutil.As(err, target) } + +// Join returns an error that wraps the given errors. +// Any nil error values are discarded. +// Join returns nil if errs contains no non-nil values. +// The error formats as the concatenation of the strings obtained +// by calling the Error method of each element of errs, with a newline +// between each string. A stack trace is also retained. +func Join(errs ...error) error { + return errutil.JoinWithDepth(1, errs...) +} + +// JoinWithDepth is like Join but the depth at which the call stack is +// captured can be specified. +func JoinWithDepth(depth int, errs ...error) error { + return errutil.JoinWithDepth(depth+1, errs...) +} diff --git a/errutil_api_test.go b/errutil_api_test.go new file mode 100644 index 0000000..a70c2b7 --- /dev/null +++ b/errutil_api_test.go @@ -0,0 +1,31 @@ +package errors_test + +import ( + "fmt" + "strings" + "testing" + + "github.com/cockroachdb/errors" + "github.com/cockroachdb/errors/testutils" +) + +func TestUnwrap(t *testing.T) { + tt := testutils.T{t} + + e := fmt.Errorf("foo %w %w", fmt.Errorf("bar"), fmt.Errorf("baz")) + + // Compatibility with go 1.20: Unwrap() on a multierror returns nil + // (per API documentation) + tt.Check(errors.Unwrap(e) == nil) +} + +// More detailed testing of Join is in datadriven_test.go. Here we make +// sure that the public API includes the stacktrace wrapper. +func TestJoin(t *testing.T) { + e := errors.Join(errors.New("abc123"), errors.New("def456")) + printed := fmt.Sprintf("%+v", e) + expected := `Error types: (1) *withstack.withStack (2) *join.joinError (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError` + if !strings.Contains(printed, expected) { + t.Errorf("Expected: %s to contain: %s", printed, expected) + } +} diff --git a/extgrpc/ext_grpc.go b/extgrpc/ext_grpc.go index bcee6d7..a9fb7f4 100644 --- a/extgrpc/ext_grpc.go +++ b/extgrpc/ext_grpc.go @@ -12,9 +12,32 @@ // implied. See the License for the specific language governing // permissions and limitations under the License. -package extgrpc +// This package provides support for gRPC error handling. It has +// two main features: +// +// 1. Automatic en/decoding of gRPC Status errors via EncodeError and +// DecodeError, enabled by importing the package. Supports both the +// standard google.golang.org/grpc/status and the gogoproto-compatible +// github.com/gogo/status packages. +// +// 2. Wrapping arbitrary errors with a gRPC status code via WrapWithGrpcCode() +// and GetGrpcCode(). There is also a gRPC middleware in middleware/grpc +// that will automatically do this (un)wrapping. +// +// Note that it is not possible to mix standard Protobuf and gogoproto +// status details via Status.WithDetails(). All details must be standard +// Protobufs with the standard grpc/status package, and all details must +// be gogoproto Protobufs with the gogo/status package. This is caused by +// WithDetails() and Details() immediately (un)marshalling the detail as +// an Any field, and since gogoproto types are not registered with the standard +// Protobuf registry (and vice versa) they cannot be unmarshalled. +// +// Furthermore, since we have to encode all errors as gogoproto Status +// messages to place them in EncodedError (again because of an Any field), +// only gogoproto status details can be preserved across EncodeError(). +// See also: https://github.com/cockroachdb/errors/issues/63 -//go:generate protoc ext_grpc.proto --gogofaster_out=. +package extgrpc import ( "context" @@ -23,21 +46,21 @@ import ( "github.com/cockroachdb/errors" "github.com/cockroachdb/errors/errbase" "github.com/cockroachdb/errors/markers" + "github.com/cockroachdb/redact" + gogorpc "github.com/gogo/googleapis/google/rpc" "github.com/gogo/protobuf/proto" - + gogostatus "github.com/gogo/status" "google.golang.org/grpc/codes" + grpcstatus "google.golang.org/grpc/status" ) -// This file demonstrates how to add a wrapper type not otherwise -// known to the rest of the library. - -// withGrpcCode is our wrapper type. +// withGrpcCode wraps an error with a gRPC status code. type withGrpcCode struct { cause error code codes.Code } -// WrapWithGrpcCode adds a Grpc code to an existing error. +// WrapWithGrpcCode wraps an error with a gRPC status code. func WrapWithGrpcCode(err error, code codes.Code) error { if err == nil { return nil @@ -45,7 +68,7 @@ func WrapWithGrpcCode(err error, code codes.Code) error { return &withGrpcCode{cause: err, code: code} } -// GetGrpcCode retrieves the Grpc code from a stack of causes. +// GetGrpcCode retrieves the gRPC code from a stack of causes. func GetGrpcCode(err error) codes.Code { if err == nil { return codes.OK @@ -70,9 +93,14 @@ func (w *withGrpcCode) Unwrap() error { return w.cause } // it knows how to format itself. func (w *withGrpcCode) Format(s fmt.State, verb rune) { errors.FormatError(w, s, verb) } -func (w *withGrpcCode) FormatError(p errors.Printer) (next error) { + +// SafeFormatter implements errors.SafeFormatter. +// Note: see the documentation of errbase.SafeFormatter for details +// on how to implement this. In particular beware of not emitting +// unsafe strings. +func (w *withGrpcCode) SafeFormatError(p errors.Printer) (next error) { if p.Detail() { - p.Printf("gRPC code: %s", w.code.String()) + p.Printf("gRPC code: %s", redact.Safe(w.code)) } return w.cause } @@ -93,7 +121,68 @@ func decodeWithGrpcCode( return &withGrpcCode{cause: cause, code: codes.Code(wp.Code)} } +// encodeGrpcStatus takes an error generated by a standard gRPC Status and +// converts it into a GoGo Protobuf representation from +// github.com/gogo/googleapis/google/rpc. +// +// This is necessary since EncodedError uses an Any field for structured errors, +// and thus can only contain Protobufs that have been registered with the GoGo +// Protobuf type registry -- the standard gRPC Status type is not a GoGo +// Protobuf, and is therefore not registered with it and cannot be decoded by +// DecodeError(). +// +// Also note that in order to use error details, the input type must be a +// gogoproto Status from github.com/gogo/status, not from the standard gRPC +// Status, and all details must be gogoproto types. The reasons for this +// are the same as for the Any field issue mentioned above. +func encodeGrpcStatus(_ context.Context, err error) (string, []string, proto.Message) { + s := gogostatus.Convert(err) + // If there are known safe details, return them. + details := []string{} + for _, detail := range s.Details() { + if safe, ok := detail.(errbase.SafeDetailer); ok { + details = append(details, safe.SafeDetails()...) + } + } + return s.Message(), details, s.Proto() +} + +// decodeGrpcStatus is the inverse of encodeGrpcStatus. It takes a gogoproto +// Status as input, and converts it into a standard gRPC Status error. +func decodeGrpcStatus( + ctx context.Context, msg string, details []string, payload proto.Message, +) error { + return grpcstatus.Convert(decodeGoGoStatus(ctx, msg, details, payload)).Err() +} + +// encodeGoGoStatus encodes a GoGo Status error. It calls encodeGrpcStatus, since +// it can handle both kinds. +func encodeGoGoStatus(ctx context.Context, err error) (string, []string, proto.Message) { + return encodeGrpcStatus(ctx, err) +} + +// decodeGoGoStatus is similar to decodeGrpcStatus, but decodes into a gogo +// Status error instead of a gRPC Status error. It is used when the original +// error was a gogo Status error rather than a gRPC Status error. +func decodeGoGoStatus(_ context.Context, _ string, _ []string, payload proto.Message) error { + s, ok := payload.(*gogorpc.Status) + if !ok { + // If input type was unexpected (shouldn't happen), we just return nil + // which will cause DecodeError() to return an opaqueLeaf. + return nil + } + return gogostatus.ErrorProto(s) +} + func init() { + grpcError := grpcstatus.Error(codes.Unknown, "") + errbase.RegisterLeafEncoder(errbase.GetTypeKey(grpcError), encodeGrpcStatus) + errbase.RegisterLeafDecoder(errbase.GetTypeKey(grpcError), decodeGrpcStatus) + + gogoError := gogostatus.Error(codes.Unknown, "") + errbase.RegisterLeafEncoder(errbase.GetTypeKey(gogoError), encodeGoGoStatus) + errbase.RegisterLeafDecoder(errbase.GetTypeKey(gogoError), decodeGoGoStatus) + errbase.RegisterWrapperEncoder(errbase.GetTypeKey((*withGrpcCode)(nil)), encodeWithGrpcCode) errbase.RegisterWrapperDecoder(errbase.GetTypeKey((*withGrpcCode)(nil)), decodeWithGrpcCode) } diff --git a/extgrpc/ext_grpc.pb.go b/extgrpc/ext_grpc.pb.go index 192d363..294eda3 100644 --- a/extgrpc/ext_grpc.pb.go +++ b/extgrpc/ext_grpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ext_grpc.proto +// source: extgrpc/ext_grpc.proto package extgrpc @@ -30,22 +30,18 @@ func (m *EncodedGrpcCode) Reset() { *m = EncodedGrpcCode{} } func (m *EncodedGrpcCode) String() string { return proto.CompactTextString(m) } func (*EncodedGrpcCode) ProtoMessage() {} func (*EncodedGrpcCode) Descriptor() ([]byte, []int) { - return fileDescriptor_86e95ae2cd328352, []int{0} + return fileDescriptor_1207e5ce7cc4d507, []int{0} } func (m *EncodedGrpcCode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *EncodedGrpcCode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_EncodedGrpcCode.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err } + return b[:n], nil } func (m *EncodedGrpcCode) XXX_Merge(src proto.Message) { xxx_messageInfo_EncodedGrpcCode.Merge(m, src) @@ -59,30 +55,24 @@ func (m *EncodedGrpcCode) XXX_DiscardUnknown() { var xxx_messageInfo_EncodedGrpcCode proto.InternalMessageInfo -func (m *EncodedGrpcCode) GetCode() uint32 { - if m != nil { - return m.Code - } - return 0 -} - func init() { proto.RegisterType((*EncodedGrpcCode)(nil), "cockroach.errors.extgrpc.EncodedGrpcCode") } -func init() { proto.RegisterFile("ext_grpc.proto", fileDescriptor_86e95ae2cd328352) } +func init() { proto.RegisterFile("extgrpc/ext_grpc.proto", fileDescriptor_1207e5ce7cc4d507) } -var fileDescriptor_86e95ae2cd328352 = []byte{ - // 134 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4b, 0xad, 0x28, 0x89, - 0x4f, 0x2f, 0x2a, 0x48, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x48, 0xce, 0x4f, 0xce, - 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x4b, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0xd6, 0x4b, 0xad, 0x28, - 0x01, 0xc9, 0x2b, 0xa9, 0x72, 0xf1, 0xbb, 0xe6, 0x25, 0xe7, 0xa7, 0xa4, 0xa6, 0xb8, 0x17, 0x15, - 0x24, 0x3b, 0xe7, 0xa7, 0xa4, 0x0a, 0x09, 0x71, 0xb1, 0x80, 0x04, 0x24, 0x18, 0x15, 0x18, 0x35, - 0x78, 0x83, 0xc0, 0x6c, 0x27, 0xc5, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, - 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, - 0x62, 0x87, 0x9a, 0x94, 0xc4, 0x06, 0xb6, 0xca, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xcf, - 0xcb, 0xf4, 0x7c, 0x00, 0x00, 0x00, +var fileDescriptor_1207e5ce7cc4d507 = []byte{ + // 146 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xad, 0x28, 0x49, + 0x2f, 0x2a, 0x48, 0xd6, 0x4f, 0xad, 0x28, 0x89, 0x07, 0x31, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, + 0x85, 0x24, 0x92, 0xf3, 0x93, 0xb3, 0x8b, 0xf2, 0x13, 0x93, 0x33, 0xf4, 0x52, 0x8b, 0x8a, 0xf2, + 0x8b, 0x8a, 0xf5, 0xa0, 0x0a, 0x95, 0x54, 0xb9, 0xf8, 0x5d, 0xf3, 0x92, 0xf3, 0x53, 0x52, 0x53, + 0xdc, 0x8b, 0x0a, 0x92, 0x9d, 0xf3, 0x53, 0x52, 0x85, 0x84, 0xb8, 0x58, 0x40, 0x02, 0x12, 0x8c, + 0x0a, 0x8c, 0x1a, 0xbc, 0x41, 0x60, 0xb6, 0x93, 0xe6, 0x89, 0x87, 0x72, 0x0c, 0x27, 0x1e, 0xc9, + 0x31, 0x5e, 0x78, 0x24, 0xc7, 0x78, 0xe3, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, + 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x14, 0x3b, 0xd4, 0xc4, 0x24, + 0x36, 0xb0, 0x95, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x59, 0x34, 0xe8, 0x14, 0x8c, 0x00, + 0x00, 0x00, } func (m *EncodedGrpcCode) Marshal() (dAtA []byte, err error) { @@ -196,10 +186,7 @@ func (m *EncodedGrpcCode) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthExtGrpc - } - if (iNdEx + skippy) < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthExtGrpc } if (iNdEx + skippy) > l { diff --git a/extgrpc/ext_grpc_test.go b/extgrpc/ext_grpc_test.go index 4f0a9cb..6d25546 100644 --- a/extgrpc/ext_grpc_test.go +++ b/extgrpc/ext_grpc_test.go @@ -17,12 +17,22 @@ package extgrpc_test import ( "context" "fmt" + "reflect" + "strings" "testing" + "unicode" "github.com/cockroachdb/errors" + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/errorspb" "github.com/cockroachdb/errors/extgrpc" "github.com/cockroachdb/errors/testutils" + "github.com/gogo/protobuf/proto" + gogostatus "github.com/gogo/status" + "github.com/stretchr/testify/require" "google.golang.org/grpc/codes" + grpcstatus "google.golang.org/grpc/status" + "google.golang.org/protobuf/runtime/protoiface" ) func TestGrpc(t *testing.T) { @@ -49,8 +59,7 @@ func TestGrpc(t *testing.T) { tt.CheckStringEqual(fmt.Sprintf("%v", err), `hello`) // The code appears when the error is printed verbosely. tt.CheckStringEqual(fmt.Sprintf("%+v", err), `hello -(1) - | gRPC code: Unavailable +(1) gRPC code: Unavailable Wraps: (2) hello Error types: (1) *extgrpc.withGrpcCode (2) *errors.errorString`) @@ -58,3 +67,165 @@ Error types: (1) *extgrpc.withGrpcCode (2) *errors.errorString`) var noErr error tt.Assert(extgrpc.GetGrpcCode(noErr) == codes.OK) } + +// dummyProto is a dummy Protobuf message which satisfies the proto.Message +// interface but is not registered with either the standard Protobuf or GoGo +// Protobuf type registries. +type dummyProto struct { + value string +} + +func (p *dummyProto) Reset() {} +func (p *dummyProto) String() string { return "" } +func (p *dummyProto) ProtoMessage() {} + +// statusIface is a thin interface for common gRPC and gogo Status functionality. +type statusIface interface { + Code() codes.Code + Message() string + Details() []interface{} + Err() error +} + +func TestEncodeDecodeStatus(t *testing.T) { + testcases := []struct { + desc string + makeStatus func(*testing.T, codes.Code, string, []proto.Message) statusIface + fromError func(err error) statusIface + expectDetails []interface{} // nil elements signify errors + }{ + { + desc: "gogo status", + makeStatus: func(t *testing.T, code codes.Code, msg string, details []proto.Message) statusIface { + s, err := gogostatus.New(code, msg).WithDetails(details...) + require.NoError(t, err) + return s + }, + fromError: func(err error) statusIface { + return gogostatus.Convert(err) + }, + expectDetails: []interface{}{ + nil, // Protobuf decode fails + &errorspb.StringsPayload{Details: []string{"foo", "bar"}}, // gogoproto succeeds + nil, // dummy decode fails + }, + }, + { + desc: "grpc status", + makeStatus: func(t *testing.T, code codes.Code, msg string, details []proto.Message) statusIface { + s := grpcstatus.New(code, msg) + for _, detail := range details { + var err error + s, err = s.WithDetails(protoiface.MessageV1(detail)) + require.NoError(t, err) + } + return s + }, + fromError: func(err error) statusIface { + return grpcstatus.Convert(err) + }, + expectDetails: []interface{}{ + // Protobuf succeeds + func() interface{} { + var st interface{} = grpcstatus.New(codes.Internal, "status").Proto() + res := reflect.New(reflect.TypeOf(st).Elem()).Interface() + copyPublicFields(res, st) + return res + }(), + nil, // gogoproto decode fails + nil, // dummy decode fails + }, + }, + } + for _, tc := range testcases { + tc := tc + t.Run(tc.desc, func(t *testing.T) { + ctx := context.Background() + + // Create a Status, using statusIface to support gRPC and gogo variants. + status := tc.makeStatus(t, codes.NotFound, "message", []proto.Message{ + grpcstatus.New(codes.Internal, "status").Proto(), // standard Protobuf + &errorspb.StringsPayload{Details: []string{"foo", "bar"}}, // GoGo Protobuf + &dummyProto{value: "dummy"}, // unregistered + }) + require.Equal(t, codes.NotFound, status.Code()) + require.Equal(t, "message", status.Message()) + + // Check the details. This varies by implementation, since different + // Protobuf decoders are used -- gRPC Status can only decode + // standard Protobufs, while gogo Status can only decode gogoproto + // Protobufs. + statusDetails := status.Details() + require.Equal(t, len(tc.expectDetails), len(statusDetails), "detail mismatch") + for i, expectDetail := range tc.expectDetails { + if expectDetail == nil { + require.Implements(t, (*error)(nil), statusDetails[i], "detail %v", i) + } else { + // gRPC populates a non-public field in the decoded struct. + // This causes a direct deep equality comparison to fail. + // To avert this, we compare just the public fields. + actual := reflect.New(reflect.TypeOf(statusDetails[i]).Elem()).Interface() + copyPublicFields(actual, statusDetails[i]) + require.Equal(t, expectDetail, actual, "detail %v", i) + } + } + + // Encode the error and check some fields. + encodedError := errbase.EncodeError(ctx, status.Err()) + leaf := encodedError.GetLeaf() + require.NotNil(t, leaf, "expected leaf") + require.Equal(t, status.Message(), leaf.Message) + require.Equal(t, []string{}, leaf.Details.ReportablePayload) // test this? + require.NotNil(t, leaf.Details.FullDetails, "expected full details") + require.Nil(t, encodedError.GetWrapper(), "unexpected wrapper") + + // Marshal and unmarshal the error, checking that + // it equals the encoded error. + marshaledError, err := encodedError.Marshal() + require.NoError(t, err) + require.NotEmpty(t, marshaledError) + + unmarshaledError := errorspb.EncodedError{} + err = proto.Unmarshal(marshaledError, &unmarshaledError) + require.NoError(t, err) + require.True(t, proto.Equal(&encodedError, &unmarshaledError), + "unmarshaled Protobuf differs") + + // Decode the error. + decodedError := errbase.DecodeError(ctx, unmarshaledError) + require.Equal(t, status.Err().Error(), decodedError.Error()) + + // Convert the error into a status, and check its properties. + decodedStatus := tc.fromError(decodedError) + require.Equal(t, status.Code(), decodedStatus.Code()) + require.Equal(t, status.Message(), decodedStatus.Message()) + + decodedDetails := decodedStatus.Details() + require.Equal(t, len(tc.expectDetails), len(decodedDetails), "detail mismatch") + for i, expectDetail := range tc.expectDetails { + if expectDetail == nil { + require.Implements(t, (*error)(nil), decodedDetails[i], "detail %v", i) + } else { + // gRPC populates a non-public field in the decoded struct. + // This causes a direct deep equality comparison to fail. + // To avert this, we compare just the public fields. + actual := reflect.New(reflect.TypeOf(decodedDetails[i]).Elem()).Interface() + copyPublicFields(actual, decodedDetails[i]) + require.Equal(t, expectDetail, actual, "detail %v", i) + } + } + }) + } +} + +func copyPublicFields(dst, src interface{}) { + srcval := reflect.Indirect(reflect.ValueOf(src)) + dstval := reflect.Indirect(reflect.ValueOf(dst)) + typ := srcval.Type() + for i := 0; i < srcval.NumField(); i++ { + fname := typ.Field(i).Name + if unicode.IsUpper(rune(fname[0])) && !strings.HasPrefix(fname, "XXX_") { + dstval.Field(i).Set(srcval.Field(i)) + } + } +} diff --git a/exthttp/ext_http.go b/exthttp/ext_http.go index 293346e..e3d0252 100644 --- a/exthttp/ext_http.go +++ b/exthttp/ext_http.go @@ -63,7 +63,12 @@ func (w *withHTTPCode) Unwrap() error { return w.cause } // it knows how to format itself. func (w *withHTTPCode) Format(s fmt.State, verb rune) { errors.FormatError(w, s, verb) } -func (w *withHTTPCode) FormatError(p errors.Printer) (next error) { + +// SafeFormatter implements errors.SafeFormatter. +// Note: see the documentation of errbase.SafeFormatter for details +// on how to implement this. In particular beware of not emitting +// unsafe strings. +func (w *withHTTPCode) SafeFormatError(p errors.Printer) (next error) { if p.Detail() { p.Printf("http code: %d", w.code) } diff --git a/exthttp/ext_http.pb.go b/exthttp/ext_http.pb.go index 5bc5d37..0e34a8d 100644 --- a/exthttp/ext_http.pb.go +++ b/exthttp/ext_http.pb.go @@ -1,13 +1,15 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: errors/exthttp/ext_http.proto +// source: exthttp/ext_http.proto package exthttp -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import io "io" +import ( + fmt "fmt" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -18,33 +20,31 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type EncodedHTTPCode struct { - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` } func (m *EncodedHTTPCode) Reset() { *m = EncodedHTTPCode{} } func (m *EncodedHTTPCode) String() string { return proto.CompactTextString(m) } func (*EncodedHTTPCode) ProtoMessage() {} func (*EncodedHTTPCode) Descriptor() ([]byte, []int) { - return fileDescriptor_ext_http_b023c55f3d71c076, []int{0} + return fileDescriptor_436340edb5a8ce1a, []int{0} } func (m *EncodedHTTPCode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *EncodedHTTPCode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } -func (dst *EncodedHTTPCode) XXX_Merge(src proto.Message) { - xxx_messageInfo_EncodedHTTPCode.Merge(dst, src) +func (m *EncodedHTTPCode) XXX_Merge(src proto.Message) { + xxx_messageInfo_EncodedHTTPCode.Merge(m, src) } func (m *EncodedHTTPCode) XXX_Size() int { return m.Size() @@ -58,10 +58,27 @@ var xxx_messageInfo_EncodedHTTPCode proto.InternalMessageInfo func init() { proto.RegisterType((*EncodedHTTPCode)(nil), "cockroach.errors.exthttp.EncodedHTTPCode") } + +func init() { proto.RegisterFile("exthttp/ext_http.proto", fileDescriptor_436340edb5a8ce1a) } + +var fileDescriptor_436340edb5a8ce1a = []byte{ + // 146 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xad, 0x28, 0xc9, + 0x28, 0x29, 0x29, 0xd0, 0x4f, 0xad, 0x28, 0x89, 0x07, 0x31, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, + 0x85, 0x24, 0x92, 0xf3, 0x93, 0xb3, 0x8b, 0xf2, 0x13, 0x93, 0x33, 0xf4, 0x52, 0x8b, 0x8a, 0xf2, + 0x8b, 0x8a, 0xf5, 0xa0, 0x0a, 0x95, 0x54, 0xb9, 0xf8, 0x5d, 0xf3, 0x92, 0xf3, 0x53, 0x52, 0x53, + 0x3c, 0x42, 0x42, 0x02, 0x9c, 0xf3, 0x53, 0x52, 0x85, 0x84, 0xb8, 0x58, 0x40, 0x02, 0x12, 0x8c, + 0x0a, 0x8c, 0x1a, 0xbc, 0x41, 0x60, 0xb6, 0x93, 0xe6, 0x89, 0x87, 0x72, 0x0c, 0x27, 0x1e, 0xc9, + 0x31, 0x5e, 0x78, 0x24, 0xc7, 0x78, 0xe3, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, + 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x14, 0x3b, 0xd4, 0xc4, 0x24, + 0x36, 0xb0, 0x95, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x17, 0x61, 0xd8, 0x8c, 0x00, + 0x00, 0x00, +} + func (m *EncodedHTTPCode) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -69,26 +86,33 @@ func (m *EncodedHTTPCode) Marshal() (dAtA []byte, err error) { } func (m *EncodedHTTPCode) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EncodedHTTPCode) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Code != 0 { - dAtA[i] = 0x8 - i++ i = encodeVarintExtHttp(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func encodeVarintExtHttp(dAtA []byte, offset int, v uint64) int { + offset -= sovExtHttp(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *EncodedHTTPCode) Size() (n int) { if m == nil { @@ -103,14 +127,7 @@ func (m *EncodedHTTPCode) Size() (n int) { } func sovExtHttp(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozExtHttp(x uint64) (n int) { return sovExtHttp(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -130,7 +147,7 @@ func (m *EncodedHTTPCode) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -158,7 +175,7 @@ func (m *EncodedHTTPCode) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Code |= (uint32(b) & 0x7F) << shift + m.Code |= uint32(b&0x7F) << shift if b < 0x80 { break } @@ -169,7 +186,7 @@ func (m *EncodedHTTPCode) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthExtHttp } if (iNdEx + skippy) > l { @@ -187,6 +204,7 @@ func (m *EncodedHTTPCode) Unmarshal(dAtA []byte) error { func skipExtHttp(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -218,10 +236,8 @@ func skipExtHttp(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -238,70 +254,34 @@ func skipExtHttp(dAtA []byte) (n int, err error) { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthExtHttp } - return iNdEx, nil + iNdEx += length case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowExtHttp - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipExtHttp(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupExtHttp + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthExtHttp + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthExtHttp = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowExtHttp = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthExtHttp = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowExtHttp = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupExtHttp = fmt.Errorf("proto: unexpected end of group") ) - -func init() { - proto.RegisterFile("errors/exthttp/ext_http.proto", fileDescriptor_ext_http_b023c55f3d71c076) -} - -var fileDescriptor_ext_http_b023c55f3d71c076 = []byte{ - // 138 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4d, 0x2d, 0x2a, 0xca, - 0x2f, 0x2a, 0xd6, 0x4f, 0xad, 0x28, 0xc9, 0x28, 0x29, 0x29, 0x00, 0xd1, 0xf1, 0x20, 0x86, 0x5e, - 0x41, 0x51, 0x7e, 0x49, 0xbe, 0x90, 0x44, 0x72, 0x7e, 0x72, 0x76, 0x51, 0x7e, 0x62, 0x72, 0x86, - 0x1e, 0x44, 0xa1, 0x1e, 0x54, 0xa1, 0x92, 0x2a, 0x17, 0xbf, 0x6b, 0x5e, 0x72, 0x7e, 0x4a, 0x6a, - 0x8a, 0x47, 0x48, 0x48, 0x80, 0x73, 0x7e, 0x4a, 0xaa, 0x90, 0x10, 0x17, 0x0b, 0x48, 0x40, 0x82, - 0x51, 0x81, 0x51, 0x83, 0x37, 0x08, 0xcc, 0x76, 0x52, 0x3c, 0xf1, 0x50, 0x8e, 0xe1, 0xc4, 0x23, - 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x6f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, - 0x63, 0x39, 0x86, 0x28, 0x76, 0xa8, 0x49, 0x49, 0x6c, 0x60, 0xab, 0x8c, 0x01, 0x01, 0x00, 0x00, - 0xff, 0xff, 0xac, 0x71, 0xb0, 0x75, 0x8b, 0x00, 0x00, 0x00, -} diff --git a/exthttp/ext_http_test.go b/exthttp/ext_http_test.go index f3b85ea..3b7c34e 100644 --- a/exthttp/ext_http_test.go +++ b/exthttp/ext_http_test.go @@ -48,8 +48,7 @@ func TestHTTP(t *testing.T) { tt.CheckStringEqual(fmt.Sprintf("%v", err), `hello`) // The code appears when the error is printed verbosely. tt.CheckStringEqual(fmt.Sprintf("%+v", err), `hello -(1) - | http code: 302 +(1) http code: 302 Wraps: (2) hello Error types: (1) *exthttp.withHTTPCode (2) *errors.errorString`) } diff --git a/fmttests/datadriven_test.go b/fmttests/datadriven_test.go new file mode 100644 index 0000000..77b9568 --- /dev/null +++ b/fmttests/datadriven_test.go @@ -0,0 +1,890 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package fmttests + +import ( + "bytes" + "context" + goErr "errors" + "flag" + "fmt" + "net" + "os" + "regexp" + "sort" + "strings" + "testing" + "time" + + "github.com/cockroachdb/datadriven" + "github.com/cockroachdb/errors/barriers" + "github.com/cockroachdb/errors/contexttags" + "github.com/cockroachdb/errors/domains" + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/errutil" + "github.com/cockroachdb/errors/hintdetail" + "github.com/cockroachdb/errors/issuelink" + "github.com/cockroachdb/errors/join" + "github.com/cockroachdb/errors/report" + "github.com/cockroachdb/errors/safedetails" + "github.com/cockroachdb/errors/secondary" + "github.com/cockroachdb/errors/telemetrykeys" + "github.com/cockroachdb/errors/withstack" + "github.com/cockroachdb/logtags" + "github.com/cockroachdb/redact" + "github.com/getsentry/sentry-go" + "github.com/kr/pretty" + pkgErr "github.com/pkg/errors" +) + +// The -generate flag generates the test input files from scratch. +// +// NB: it is advised to not use -generate if the test suite as already generated +// does not pass. Consider examining failure and/or using -rewrite until +// the tests pass, then use -generate. +// +// This is because investigating test failures during generation makes +// troubleshooting errors more difficult. +var generateTestFiles = flag.Bool( + "generate", false, + "generate the error formatting tests", +) + +var leafCommands = map[string]commandFn{ + "goerr": func(_ error, args []arg) error { return goErr.New(strfy(args)) }, + + "os-invalid": func(_ error, _ []arg) error { return os.ErrInvalid }, + "os-permission": func(_ error, _ []arg) error { return os.ErrPermission }, + "os-exist": func(_ error, _ []arg) error { return os.ErrExist }, + "os-notexist": func(_ error, _ []arg) error { return os.ErrNotExist }, + "os-closed": func(_ error, _ []arg) error { return os.ErrClosed }, + "ctx-canceled": func(_ error, _ []arg) error { return context.Canceled }, + "ctx-deadline": func(_ error, _ []arg) error { return context.DeadlineExceeded }, + + "pkgerr": func(err error, args []arg) error { return pkgErr.New(strfy(args)) }, + // errNoFmt does neither implement Format() nor FormatError(). + "nofmt": func(_ error, args []arg) error { return &errNoFmt{strfy(args)} }, + // errFmto has just a Format() method that does everything, and does + // not know about neither FormatError() nor errors.Formatter. + // This is the "old style" support for formatting, e.g. used + // in github.com/pkg/errors. + "fmt-old": func(_ error, args []arg) error { return &errFmto{strfy(args)} }, + // errFmtoDelegate is like errFmto but the Error() method delegates to + // Format(). + "fmt-old-delegate": func(_ error, args []arg) error { return &errFmtoDelegate{strfy(args)} }, + // errFmtp implements Format() that forwards to FormatError(), + // but does not implement errors.Formatter. It is used + // to check that FormatError() does the right thing. + "fmt-partial": func(_ error, args []arg) error { return &errFmtp{strfy(args)} }, + // errFmt has both Format() and FormatError(), + // and demonstrates the common case of "rich" errors. + "fmt": func(_ error, args []arg) error { return &errFmt{strfy(args)} }, + // errSafeFormat has SafeFormatError(), and has Error() and Format() + // redirect to that. + "safefmt": func(_ error, args []arg) error { return &errSafeFormat{strfy(args)} }, + + // errutil.New implements multi-layer errors. + "newf": func(_ error, args []arg) error { return errutil.Newf("new-style %s", strfy(args)) }, + // assertions mask their cause from the barriers, but otherwise format as-is. + "assertion": func(_ error, args []arg) error { return errutil.AssertionFailedf("assertmsg %s", strfy(args)) }, + // newf-attached embeds its error argument as extra payload. + "newf-attached": func(_ error, args []arg) error { + return errutil.Newf("new-style %s: %v", strfy(args), errutil.New("payload")) + }, + + "unimplemented": func(_ error, args []arg) error { + return issuelink.UnimplementedErrorf(issuelink.IssueLink{IssueURL: "https://mysite", Detail: "issuedetails"}, strfy(args)) + }, +} + +var leafOnlyExceptions = map[string]string{} + +func init() { + for leafName := range leafCommands { + // The following leaf types don't implement FormatError(), so they don't get + // enhanced displays via %+v automatically. Formattable() adds it to them. + // So it is expected that %+v via Formattable() is different (better) than + // %+v on its own. + // + if leafName == "nofmt" || strings.HasPrefix(leafName, "os-") || strings.HasPrefix(leafName, "ctx-") { + leafOnlyExceptions[leafName] = `accept %\+v via Formattable.*IRREGULAR: not same as %\+v` + } + } + + // + // Additionally, the Go idea of %#v is somewhat broken: this is specified + // in printf() docstrings to always emit a "Go representation". However, + // if the object implements Formatter(), this takes over the display of %#v + // too. Most implementation of Format() are incomplete and unable to + // emit a "Go representation", so this breaks. + // + for _, v := range []string{"goerr", "fmt-old", "fmt-old-delegate"} { + leafOnlyExceptions[v] = ` +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +` + } + + // The simple leaf type from github/pkg/errors does not properly implement + // Format(). So it does not know how to format %x/%X properly. + leafOnlyExceptions[`pkgerr`] = ` +accept %x.*IRREGULAR: not same as hex Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v` +} + +var wrapCommands = map[string]commandFn{ + "goerr": func(err error, args []arg) error { return fmt.Errorf("%s: %w", strfy(args), err) }, + // errorf constructs a wrapper that encodes as an opaqueWrapper with + // `ownsErrorString` set to true. This is because the error string of the + // wrapper is not a strict prefix with `: ` of the wrapped error. + "go-errorf": func(e error, args []arg) error { + return fmt.Errorf("%s - %w", strfy(args), e) + }, + "go-errorf-suffix": func(e error, args []arg) error { + return fmt.Errorf("%w - %s", e, strfy(args)) + }, + "go-errorf-multi": func(err error, args []arg) error { + return fmt.Errorf("%s - %w %w", strfy(args), err, pkgErr.New("sibling error in wrapper")) + }, + "opaque": func(err error, _ []arg) error { + return errbase.DecodeError(context.Background(), + errbase.EncodeError(context.Background(), err)) + }, + "os-syscall": func(err error, _ []arg) error { return os.NewSyscallError("open", err) }, + "os-link": func(err error, _ []arg) error { + return &os.LinkError{Op: "link", Old: "/path/to/file", New: "/path/to/newfile", Err: err} + }, + "os-path": func(err error, _ []arg) error { return &os.PathError{Op: "link", Path: "/path/to/file", Err: err} }, + "os-netop": func(err error, _ []arg) error { + return &net.OpError{Op: "send", Net: "tcp", Addr: &net.UnixAddr{Name: "unixhello", Net: "unixgram"}, Err: err} + }, + "pkgmsg": func(err error, args []arg) error { return pkgErr.WithMessage(err, strfy(args)) }, + "pkgstack": func(err error, _ []arg) error { return pkgErr.WithStack(err) }, + // werrNoFmt does neither implement Format() nor FormatError(). + "nofmt": func(err error, args []arg) error { return &werrNoFmt{err, strfy(args)} }, + // werrFmto has just a Format() method that does everything, and does + // not know about neither FormatError() nor errors.Formatter. + // This is the "old style" support for formatting, e.g. used + // in github.com/pkg/errors. + "fmt-old": func(err error, args []arg) error { return &werrFmto{err, strfy(args)} }, + // werrFmtoDelegate is like errFmto but the Error() method delegates to + // Format(). + "fmt-old-delegate": func(err error, args []arg) error { return &werrFmtoDelegate{err, strfy(args)} }, + // werrFmtp implements Format() that forwards to FormatError(), + // but does not implement errors.Formatter. It is used + // to check that FormatError() does the right thing. + "fmt-partial": func(err error, args []arg) error { return &werrFmtp{err, strfy(args)} }, + // werrFmt has both Format() and FormatError(), + // and demonstrates the common case of "rich" errors. + "fmt": func(err error, args []arg) error { return &werrFmt{err, strfy(args)} }, + // werrSafeFormat has SafeFormatError(), and has Error() and Format() + // redirect to that. + "safefmt": func(err error, args []arg) error { return &werrSafeFormat{cause: err, msg: strfy(args)} }, + // werrEmpty has no message of its own. Its Error() is implemented via its cause. + "empty": func(err error, _ []arg) error { return &werrEmpty{err} }, + // werrDelegate delegates its Error() behavior to FormatError(). + "delegate": func(err error, args []arg) error { return &werrDelegate{err, strfy(args)} }, + // werrDelegate-noprefix delegates its Error() behavior to FormatError() via fmt.Format, has + // no prefix of its own in its short message but has a detail field. + "delegate-noprefix": func(err error, _ []arg) error { return &werrDelegateNoPrefix{err} }, + // werrDelegateEmpty implements Error via fmt.Formatter using FormatError, + // and has no message nor detail of its own. + "delegate-empty": func(err error, _ []arg) error { return &werrDelegateEmpty{err} }, + // werrWithElidedClause overrides its cause's Error() from its own + // short message. + "elided-cause": func(err error, args []arg) error { return &werrWithElidedCause{err, strfy(args)} }, + "multi-cause": func(err error, args []arg) error { + return newMultiCause("A", false, /* elide */ + newMultiCause("C", false /* elide */, err, errutil.New(strfy(args))), + newMultiCause("B", false /* elide */, errutil.New("included 1"), errutil.New("included 2")), + ) + }, + // This iteration elides the causes in the second child error, + // which omits them from the format string. + "multi-elided-cause": func(err error, args []arg) error { + return newMultiCause("A", false, /* elide */ + newMultiCause("C", false /* elide */, err, errutil.New(strfy(args))), + newMultiCause("B", true /* elide */, errutil.New("elided 1"), errutil.New("elided 2")), + ) + }, + + // stack attaches a simple stack trace. + "stack": func(err error, _ []arg) error { return withstack.WithStack(err) }, + + // msg is our own public message wrapper, which implements a proper + // FormatError() method. + "msg": func(err error, args []arg) error { return errutil.WithMessage(err, strfy(args)) }, + + // newfw is errors.Newf("%w") which is the fmt-standard way to wrap an error. + "newfw": func(err error, args []arg) error { return errutil.Newf("new-style (%s) :: %w ::", strfy(args), err) }, + + // newfw-suffix is like newfw, except the cause is printed before + // the prefix. + "newfw-suffix": func(err error, args []arg) error { return errutil.Newf(":: %w :: new-style (%s)", err, strfy(args)) }, + + // errutil.Wrap implements multi-layer wrappers. + "wrapf": func(err error, args []arg) error { return errutil.Wrapf(err, "new-stylew %s", strfy(args)) }, + // assertions mask their cause from the barriers, but otherwise format as-is. + "assertion": func(err error, args []arg) error { return errutil.HandleAsAssertionFailure(err) }, + // assertions mask their cause from the barriers, with a custom assertion message. + "assertwrap": func(err error, args []arg) error { + return errutil.NewAssertionErrorWithWrappedErrf(err, "assertmsg: %s", strfy(args)) + }, + // barrier is a simpler barrier + "barrier": func(err error, _ []arg) error { return barriers.Handled(err) }, + // domains are hidden annotations. Tested here for sentry reporting. + "domain": func(err error, _ []arg) error { return domains.WithDomain(err, "mydomain") }, + // handled-domain wraps the error behind a barrier in its implicit domain. + "handled-domain": func(err error, _ []arg) error { return domains.Handled(err) }, + // hint and detail add user annotations. + "hint": func(err error, args []arg) error { return hintdetail.WithHint(err, strfy(args)) }, + "detail": func(err error, args []arg) error { return hintdetail.WithDetail(err, strfy(args)) }, + // migrated changes the path to mimic a type that has migrated packages. + "migrated": func(err error, _ []arg) error { return &werrMigrated{err} }, + // safedetails adds non-visible safe details + "safedetails": func(err error, args []arg) error { return safedetails.WithSafeDetails(err, "safe %s", strfy(args)) }, + // secondary adds an error annotation + "secondary": func(err error, args []arg) error { return secondary.WithSecondaryError(err, errutil.New(strfy(args))) }, + // wrapf-attached embeds its error argument as extra payload. + "wrapf-attached": func(err error, args []arg) error { + return errutil.Wrapf(err, "new-style %s (%v)", strfy(args), errutil.New("payload")) + }, + // issuelink attaches a link and detail. + "issuelink": func(err error, args []arg) error { + return issuelink.WithIssueLink(err, issuelink.IssueLink{IssueURL: "https://mysite", Detail: strfy(args)}) + }, + // telemetry adds telemetry keys + "telemetry": func(err error, args []arg) error { return telemetrykeys.WithTelemetry(err, "somekey", strfy(args)) }, + // tags captures context tags + "tags": func(err error, args []arg) error { + ctx := context.Background() + ctx = logtags.AddTag(ctx, "k", 123) + ctx = logtags.AddTag(ctx, "safe", redact.Safe(456)) + return contexttags.WithContextTags(err, ctx) + }, + "join": func(err error, args []arg) error { + return join.Join(err, errutil.New(strfy(args))) + }, +} + +var noPrefixWrappers = map[string]bool{ + "assertion": true, + "barrier": true, + "delegate-empty": true, + "delegate-noprefix": true, + "detail": true, + "domain": true, + "empty": true, + "handled-domain": true, + "hint": true, + "issuelink": true, + "migrated": true, + "os-link": true, + "os-netop": true, + "os-path": true, + "os-syscall": true, + "pkgstack": true, + "safedetails": true, + "secondary": true, + "stack": true, + "tags": true, + "telemetry": true, + "join": true, +} + +var wrapOnlyExceptions = map[string]string{} + +func init() { + for _, v := range []string{ + // The following wrapper types don't implement FormatError(), so they don't get + // enhanced displays via %+v automatically. Formattable() adds it to them. + // So it is expected that %+v via Formattable() is different (better) than + // %+v on its own. + // + // Additionally, the Go idea of %#v is somewhat broken: this is specified + // in printf() docstrings to always emit a "Go representation". However, + // if the object implements Formatter(), this takes over the display of %#v + // too. Most implementation of Format() are incomplete and unable to + // emit a "Go representation", so this breaks. + // + "goerr", "go-errorf", "go-errorf-suffix", "go-errorf-multi", "fmt-old", "fmt-old-delegate", + "os-syscall", + "os-link", + "os-path", + "os-netop", + // In the case of werrNoFmt{}, there is no Format() method, so the + // stdlib Fprintf is able to emit a Go representation. However it's + // a bit dumb doing so, and only reports members by address. Our + // Formattable() implementation is able to report more, but that + // means they don't match. + "nofmt", + "errorf", + "join", + } { + wrapOnlyExceptions[v] = ` +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +` + } + + // The wrapper types from github/pkg/errors does not properly implement + // Format(). So they do not know how to format %x/%X/%q properly. + for _, v := range []string{"pkgmsg", "pkgstack"} { + wrapOnlyExceptions[v] = ` +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v` + } +} + +const testPath = "testdata/format" + +func generateFiles() { + // Make the leaf and wrapper names sorted for determinism. + var leafNames []string + for leafName := range leafCommands { + leafNames = append(leafNames, leafName) + } + sort.Strings(leafNames) + var wrapNames []string + for wrapName := range wrapCommands { + wrapNames = append(wrapNames, wrapName) + } + sort.Strings(wrapNames) + + // Generate the "leaves" input file, which tests formatting for + // leaf-only error types. + var leafTests bytes.Buffer + for _, leafName := range leafNames { + fmt.Fprintf(&leafTests, "run\n"+ + // The leaf error being examined. + "%s oneline twoline\n"+ + // accepted irregularities, if any, follow. + "%s\n", + leafName, leafOnlyExceptions[leafName]) + if !strings.HasPrefix(leafName, "os-") && !strings.HasPrefix(leafName, "ctx-") { + // All renderings need to contain at least the words 'oneline' and 'twolines'. + leafTests.WriteString("require (?s)oneline.*twoline\n") + } + leafTests.WriteString("----\n\n") + } + os.WriteFile(testPath+"/leaves", leafTests.Bytes(), 0666) + + // Generate the "leaves-via-network" input file, which tests + // formatting for leaf-only error types after being brought over + // the network. + leafTests.Reset() + for _, leafName := range leafNames { + fmt.Fprintf(&leafTests, "run\n"+ + // The leaf error being examined. + "%s oneline twoline\n"+ + "opaque\n"+ + // accepted irregularities, if any, follow. + "%s\n", + leafName, leafOnlyExceptions[leafName]) + if !strings.HasPrefix(leafName, "os-") && !strings.HasPrefix(leafName, "ctx-") { + // All renderings need to contain at least the words 'oneline' and 'twolines'. + leafTests.WriteString("require (?s)oneline.*twoline\n") + } + leafTests.WriteString("----\n\n") + } + os.WriteFile(testPath+"/leaves-via-network", leafTests.Bytes(), 0666) + + // Leaf types for which we want to test all wrappers: + wrapperLeafTypes := []string{"fmt", "goerr", "nofmt", "pkgerr", "newf"} + // Generate the direct wrapper tests. + for _, leafName := range wrapperLeafTypes { + var wrapTests bytes.Buffer + for _, wrapName := range wrapNames { + if wrapName == "opaque" { + // opaque wrappers get their own tests in separate files. + continue + } + + fmt.Fprintf(&wrapTests, "run\n"+ + // The leaf error being examined. + "%s innerone innertwo\n"+ + // The wrappererror being examined. + "%s outerthree outerfour\n"+ + // accepted irregularities, if any, follow. + "%s\n", + leafName, wrapName, wrapOnlyExceptions[wrapName]) + + expectedLeafString := "innerone.*innertwo" + if !strings.HasPrefix(leafName, "os-") && !strings.HasPrefix(leafName, "ctx-") { + expectedLeafString = "" + } + + if noPrefixWrappers[wrapName] { + // No prefix in wrapper. Only expect the leaf (inner) error. + fmt.Fprintf(&wrapTests, "require (?s)%s\n", expectedLeafString) + } else if wrapName == "elided-cause" { + // This wrapper type hides the inner error. + wrapTests.WriteString("require (?s)outerthree.*outerfour\n") + } else if strings.HasSuffix(wrapName, "-suffix") { + // Wrapper with message override: the test cases place + // the leaf before the prefix. + fmt.Fprintf(&wrapTests, "require (?s)%s.*outerthree.*outerfour\n", expectedLeafString) + } else { + // Wrapper with prefix: all renderings need to contain at + // least the words from the leaf and the wrapper. + fmt.Fprintf(&wrapTests, "require (?s)outerthree.*outerfour.*%s\n", expectedLeafString) + } + wrapTests.WriteString("----\n\n") + } + os.WriteFile( + fmt.Sprintf(testPath+"/wrap-%s", leafName), + wrapTests.Bytes(), 0666) + } + + // Generate the wrappers-via-network tests. + for _, leafName := range wrapperLeafTypes { + var wrapTests bytes.Buffer + for _, wrapName := range wrapNames { + if wrapName == "opaque" { + // opaque wrappers get their own tests in separate files. + continue + } + + fmt.Fprintf(&wrapTests, "run\n"+ + // The leaf error being examined. + "%s innerone innertwo\n"+ + // The wrappererror being examined. + "%s outerthree outerfour\n"+ + // Via network. + "opaque\n"+ + // accepted irregularities, if any, follow. + "%s\n", + leafName, wrapName, wrapOnlyExceptions[wrapName]) + if noPrefixWrappers[wrapName] { + // No prefix in wrapper. Only expect the leaf (inner) error. + wrapTests.WriteString("require (?s)innerone.*innertwo\n") + } else if wrapName == "elided-cause" { + // This wrapper type hides the inner error. + wrapTests.WriteString("require (?s)outerthree.*outerfour\n") + } else if strings.HasSuffix(wrapName, "-suffix") { + // Wrapper with message override: the test cases place + // the leaf before the prefix. + wrapTests.WriteString("require (?s)innerone.*innertwo.*outerthree.*outerfour\n") + } else { + // Wrapper with prefix: all renderings need to contain at + // least the words from the leaf and the wrapper. + wrapTests.WriteString("require (?s)outerthree.*outerfour.*innerone.*innertwo\n") + } + wrapTests.WriteString("----\n\n") + } + os.WriteFile( + fmt.Sprintf(testPath+"/wrap-%s-via-network", leafName), + wrapTests.Bytes(), 0666) + } +} + +// TestDatadriven exercises error formatting and Sentry report +// formatting using the datadriven package. +// +// The test DSL accepts a single directive "run" with a sub-DSL +// for each test. The sub-DSL accepts 3 types of directive: +// +// accept +// Tells the test that a "problem" or "irregularity" +// is not to be considered a test failure if it matches +// the provided +// +// require +// Requires the result of both Error() and %+v formatting +// to match +// +// +// The remaining directives in the sub-DSL construct +// an error object to format using a stack: the first directive +// creates a leaf error; the 2nd one wraps it a first time, +// the 3rd one wraps it a second time, and so forth. +func TestDatadriven(t *testing.T) { + if *generateTestFiles { + generateFiles() + } + + // events collected the emitted sentry report on each test. + var events []*sentry.Event + + client, err := sentry.NewClient( + sentry.ClientOptions{ + // Install a Transport that locally records events rather than + // sending them to Sentry over HTTP. + Transport: interceptingTransport{ + SendFunc: func(event *sentry.Event) { + events = append(events, event) + }, + }, + }, + ) + if err != nil { + t.Fatal(err) + } + sentry.CurrentHub().BindClient(client) + + datadriven.Walk(t, testPath, func(t *testing.T, path string) { + datadriven.RunTest(t, path, + func(t *testing.T, d *datadriven.TestData) string { + if d.Cmd != "run" { + d.Fatalf(t, "unknown directive: %s", d.Cmd) + } + pos := d.Pos + var resultErr error + var acceptList []*regexp.Regexp + var acceptDirectives []string + var requiredMsgRe *regexp.Regexp + + // We're going to execute the input line-by-line. + lines := strings.Split(d.Input, "\n") + for i, line := range lines { + if short := strings.TrimSpace(line); short == "" || strings.HasPrefix(short, "#") { + // Comment or empty line. Do nothing. + continue + } + // Compute a line prefix, to clarify error message. We + // prefix a newline character because some text editor do + // not know how to jump to the location of an error if + // there are multiple file:line prefixes on the same line. + d.Pos = fmt.Sprintf("\n%s: (+%d)", pos, i+1) + + switch { + case strings.HasPrefix(line, "accept "): + acceptDirectives = append(acceptDirectives, line) + acceptList = append(acceptList, regexp.MustCompile(line[7:])) + + case strings.HasPrefix(line, "require "): + requiredMsgRe = regexp.MustCompile(line[8:]) + + default: + var err error + d.Cmd, d.CmdArgs, err = datadriven.ParseLine(line) + if err != nil { + d.Fatalf(t, "%v", err) + } + var c commandFn + if resultErr == nil { + c = leafCommands[d.Cmd] + } else { + c = wrapCommands[d.Cmd] + } + if c == nil { + d.Fatalf(t, "unknown command: %s", d.Cmd) + } + resultErr = c(resultErr, d.CmdArgs) + } + } + + accepted := func(irregular string) bool { + for _, re := range acceptList { + if re.MatchString(irregular) { + return true + } + } + return false + } + + // Result buffer. + var buf bytes.Buffer + reportIrregular := func(format string, args ...interface{}) { + s := fmt.Sprintf(format, args...) + fmt.Fprint(&buf, s) + if accepted(s) { + } else { + d.Fatalf(t, "unexpected:\n%s\n\naccepted irregularities:\n%s", + buf.String(), strings.Join(acceptDirectives, "\n")) + } + } + + fmt.Fprintf(&buf, "%# v\n", pretty.Formatter(resultErr)) + + buf.WriteString("=====\n===== non-redactable formats\n=====\n") + hErr := fmt.Sprintf("%#v", resultErr) + fmt.Fprintf(&buf, "== %%#v\n%s\n", hErr) + + refStr := resultErr.Error() + fmt.Fprintf(&buf, "== Error()\n%s\n", refStr) + + if requiredMsgRe != nil && !requiredMsgRe.MatchString(refStr) { + d.Fatalf(t, "unexpected:\n%s\n\nerror string does not match required regexp %q", + buf.String(), requiredMsgRe) + } + + vErr := fmt.Sprintf("%v", resultErr) + if vErr == refStr { + fmt.Fprintf(&buf, "== %%v = Error(), good\n") + } else { + reportIrregular("== %%v (IRREGULAR: not same as Error())\n%s", vErr) + } + sErr := fmt.Sprintf("%s", resultErr) + if sErr == refStr { + fmt.Fprintf(&buf, "== %%s = Error(), good\n") + } else { + reportIrregular("== %%s (IRREGULAR: not same as Error())\n%s\n", sErr) + } + qErr := fmt.Sprintf("%q", resultErr) + if qref := fmt.Sprintf("%q", refStr); qErr == qref { + fmt.Fprintf(&buf, "== %%q = quoted Error(), good\n") + } else { + reportIrregular("== %%q (IRREGULAR: not same as quoted Error())\n%s\n", qErr) + } + xErr := fmt.Sprintf("%x", resultErr) + if xref := fmt.Sprintf("%x", refStr); xErr == xref { + fmt.Fprintf(&buf, "== %%x = hex Error(), good\n") + } else { + if xErr == "" { + xErr = "(EMPTY STRING)" + } + reportIrregular("== %%x (IRREGULAR: not same as hex Error())\n%s\n", xErr) + } + xxErr := fmt.Sprintf("%X", resultErr) + if xxref := fmt.Sprintf("%X", refStr); xxErr == xxref { + fmt.Fprintf(&buf, "== %%X = HEX Error(), good\n") + } else { + if xxErr == "" { + xxErr = "(EMPTY STRING)" + } + reportIrregular("== %%X (IRREGULAR: not same as HEX Error())\n%s\n", xxErr) + } + + vpErr := fmt.Sprintf("%+v", resultErr) + if vpErr == vErr { + fmt.Fprintf(&buf, "== %%+v = Error(), ok\n") + } else { + fmt.Fprintf(&buf, "== %%+v\n%s\n", vpErr) + } + + hfErr := fmt.Sprintf("%#v", errbase.Formattable(resultErr)) + if hfErr == hErr { + fmt.Fprintf(&buf, "== %%#v via Formattable() = %%#v, good\n") + } else { + reportIrregular("== %%#v via Formattable() (IRREGULAR: not same as %%#v)\n%s\n", hfErr) + } + + vfErr := fmt.Sprintf("%v", errbase.Formattable(resultErr)) + if vfErr == refStr { + fmt.Fprintf(&buf, "== %%v via Formattable() = Error(), good\n") + } else { + reportIrregular("== %%v via Formattable() (IRREGULAR: not same as Error())\n%s\n", vfErr) + } + sfErr := fmt.Sprintf("%s", errbase.Formattable(resultErr)) + if sfErr == vfErr { + fmt.Fprintf(&buf, "== %%s via Formattable() = %%v via Formattable(), good\n") + } else { + reportIrregular("== %%s via Formattable() (IRREGULAR: not same as Error())\n%s\n", sfErr) + } + qfErr := fmt.Sprintf("%q", errbase.Formattable(resultErr)) + if qfref := fmt.Sprintf("%q", vfErr); qfErr == qfref { + fmt.Fprintf(&buf, "== %%q via Formattable() = quoted %%v via Formattable(), good\n") + } else { + reportIrregular("== %%q via Formattable() (IRREGULAR: not same as quoted %%v via Formattable())\n%s\n", qfErr) + } + + vpfErr := fmt.Sprintf("%+v", errbase.Formattable(resultErr)) + if vpfErr == vpErr { + fmt.Fprintf(&buf, "== %%+v via Formattable() == %%+v, good\n") + } else { + reportIrregular("== %%+v via Formattable() (IRREGULAR: not same as %%+v)\n%s\n", vpfErr) + } + + buf.WriteString("=====\n===== redactable formats\n=====\n") + + rErr := redact.Sprint(resultErr) + annot := " (IRREGULAR: not congruent)" + stripped := rErr.StripMarkers() + if stripped == vErr { + annot = ", ok - congruent with %v" + } else if stripped == vfErr { + annot = ", ok - congruent with %v via Formattable()" + } + if strings.HasPrefix(annot, ", ok") { + fmt.Fprintf(&buf, "== printed via redact Print()%s\n%s\n", annot, string(rErr)) + } else { + reportIrregular("== printed via redact Print()%s\n%s\n", annot, string(rErr)) + } + checkMarkers(&buf, d, t, string(rErr)) + + vrErr := string(redact.Sprintf("%v", resultErr)) + if vrErr == string(rErr) { + fmt.Fprintf(&buf, "== printed via redact Printf() %%v = Print(), good\n") + } else { + reportIrregular("== printed via redact Printf() %%v (IRREGULAR: not same as Print())\n%s\n", vrErr) + } + checkMarkers(&buf, d, t, vrErr) + + srErr := string(redact.Sprintf("%s", resultErr)) + if srErr == string(rErr) { + fmt.Fprintf(&buf, "== printed via redact Printf() %%s = Print(), good\n") + } else { + reportIrregular("== printed via redact Printf() %%s (IRREGULAR: not same as Print())\n%s\n", vrErr) + } + checkMarkers(&buf, d, t, srErr) + + qrErr := string(redact.Sprintf("%q", resultErr)) + m := string(redact.StartMarker()) + if strings.HasPrefix(qrErr, m+"%!q(") { + fmt.Fprintf(&buf, "== printed via redact Printf() %%q, refused - good\n") + } else { + reportIrregular("== printed via redact Printf() %%q - UNEXPECTED\n%s\n", qrErr) + } + checkMarkers(&buf, d, t, qrErr) + + xrErr := string(redact.Sprintf("%x", resultErr)) + if strings.HasPrefix(xrErr, m+"%!x(") { + fmt.Fprintf(&buf, "== printed via redact Printf() %%x, refused - good\n") + } else { + reportIrregular("== printed via redact Printf() %%x - UNEXPECTED\n%s\n", xrErr) + } + checkMarkers(&buf, d, t, xrErr) + + xxrErr := string(redact.Sprintf("%X", resultErr)) + if strings.HasPrefix(xxrErr, m+"%!X(") { + fmt.Fprintf(&buf, "== printed via redact Printf() %%X, refused - good\n") + } else { + reportIrregular("== printed via redact Printf() %%X - UNEXPECTED\n%s\n", xxrErr) + } + checkMarkers(&buf, d, t, xxrErr) + + vprErr := redact.Sprintf("%+v", resultErr) + annot = " (IRREGULAR: not congruent)" + stripped = vprErr.StripMarkers() + if stripped == vpErr { + annot = ", ok - congruent with %+v" + } else if stripped == vpfErr { + annot = ", ok - congruent with %+v via Formattable()" + } + if strings.HasPrefix(annot, ", ok") { + fmt.Fprintf(&buf, "== printed via redact Printf() %%+v%s\n%s\n", annot, string(vprErr)) + } else { + reportIrregular("== printed via redact Printf()%%+v%s\n%s\n", annot, string(vprErr)) + } + checkMarkers(&buf, d, t, string(vprErr)) + + buf.WriteString("=====\n===== Sentry reporting\n=====\n") + + events = nil + if eventID := report.ReportError(resultErr); eventID == "" { + d.Fatalf(t, "Sentry eventID is empty") + } + // t.Logf("received events: %# v", pretty.Formatter(events)) + if len(events) != 1 { + d.Fatalf(t, "more than one event received") + } + se := events[0] + + fmt.Fprintf(&buf, "== Message payload\n%s\n", se.Message) + + // Make the extra key deterministic. + extraNames := make([]string, 0, len(se.Extra)) + for ek := range se.Extra { + extraNames = append(extraNames, ek) + } + sort.Strings(extraNames) + for _, ek := range extraNames { + extraS := fmt.Sprintf("%v", se.Extra[ek]) + fmt.Fprintf(&buf, "== Extra %q\n%s\n", ek, strings.TrimSpace(extraS)) + } + + for i, exc := range se.Exception { + fmt.Fprintf(&buf, "== Exception %d (Module: %q)\nType: %q\nTitle: %q\n", i+1, exc.Module, exc.Type, exc.Value) + if exc.Stacktrace == nil { + fmt.Fprintf(&buf, "(NO STACKTRACE)\n") + } else { + for _, f := range exc.Stacktrace.Frames { + fmt.Fprintf(&buf, "%s:%d:\n", f.Filename, f.Lineno) + fmt.Fprintf(&buf, " (%s) %s()\n", f.Module, f.Function) + } + } + } + + return fmtClean(buf.String()) + }) + }) +} + +func checkMarkers(buf *bytes.Buffer, d *datadriven.TestData, t *testing.T, s string) { + sm := string(redact.StartMarker()) + em := string(redact.EndMarker()) + anyMarker := regexp.MustCompile("((?s)[" + sm + em + "].*)") + expectOpen := true + for { + s = anyMarker.FindString(s) + if s == "" { + break + } + if expectOpen { + if strings.HasPrefix(s, em) { + d.Fatalf(t, "unexpected closing redaction marker:\n%s\n\n(suffix: %q)", buf.String(), s) + } + s = strings.TrimPrefix(s, sm) + } else { + if strings.HasPrefix(s, sm) { + d.Fatalf(t, "unexpected open redaction marker:\n%s\n\n(suffix: %q)", buf.String(), s) + } + s = strings.TrimPrefix(s, em) + } + expectOpen = !expectOpen + } + if !expectOpen { + d.Fatalf(t, "unclosed redaction marker:\n%s\n\n(suffix: %q)", buf.String(), s) + } +} + +type arg = datadriven.CmdArg + +type commandFn func(inputErr error, args []arg) (resultErr error) + +func strfy(args []arg) string { + var out strings.Builder + sp := "" + for _, arg := range args { + out.WriteString(sp) + if len(arg.Vals) == 0 { + out.WriteString(arg.Key) + } else { + out.WriteString(strings.Join(arg.Vals, " ")) + } + sp = "\n" + } + return out.String() +} + +// interceptingTransport is an implementation of sentry.Transport that +// delegates calls to the SendEvent method to the send function contained +// within. +type interceptingTransport struct { + // SendFunc is the send callback. + SendFunc func(event *sentry.Event) +} + +var _ sentry.Transport = &interceptingTransport{} + +// Flush implements the sentry.Transport interface. +func (it interceptingTransport) Flush(time.Duration) bool { + return true +} + +// Configure implements the sentry.Transport interface. +func (it interceptingTransport) Configure(sentry.ClientOptions) { +} + +// SendEvent implements the sentry.Transport interface. +func (it interceptingTransport) SendEvent(event *sentry.Event) { + it.SendFunc(event) +} diff --git a/safedetails/redact_go113.go b/fmttests/datadriven_test_go116.go similarity index 76% rename from safedetails/redact_go113.go rename to fmttests/datadriven_test_go116.go index 5c4cd5e..ca3e50b 100644 --- a/safedetails/redact_go113.go +++ b/fmttests/datadriven_test_go116.go @@ -1,4 +1,4 @@ -// Copyright 2019 The Cockroach Authors. +// Copyright 2021 The Cockroach Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,12 +12,11 @@ // implied. See the License for the specific language governing // permissions and limitations under the License. -// +build go1.13 +// +build go1.16 -package safedetails +package fmttests -import "strings" - -func redactPre113Wrappers(buf *strings.Builder, err error) bool { - return false +func fakeGo116(s string) string { + // We are at 1.16 already. Nothing to fake. + return s } diff --git a/fmttests/datadriven_test_pre116.go b/fmttests/datadriven_test_pre116.go new file mode 100644 index 0000000..84b750b --- /dev/null +++ b/fmttests/datadriven_test_pre116.go @@ -0,0 +1,31 @@ +// Copyright 2021 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// +build !go1.16 + +package fmttests + +import "strings" + +func fakeGo116(s string) string { + // In Go 1.16, the canonical type for os.PathError is io/fs/*fs.PathError. + // So when running the tests with a pre-1.16 runtime, the strings + // emitted by printing out the error objects don't match the output + // expected in the tests, which was generated with go 1.16. + s = strings.ReplaceAll(s, "os/*os.PathError (*::)", "io/fs/*fs.PathError (os/*os.PathError::)") + s = strings.ReplaceAll(s, " *os.PathError", " *fs.PathError") + s = strings.ReplaceAll(s, "\n*os.PathError", "\n*fs.PathError") + s = strings.ReplaceAll(s, "&os.PathError", "&fs.PathError") + return s +} diff --git a/fmttests/format_error_test.go b/fmttests/format_error_test.go new file mode 100644 index 0000000..db8e1a3 --- /dev/null +++ b/fmttests/format_error_test.go @@ -0,0 +1,787 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package fmttests + +import ( + "context" + goErr "errors" + "fmt" + "os" + "path/filepath" + "regexp" + "strings" + "testing" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/errors/errutil" + "github.com/cockroachdb/errors/testutils" + "github.com/cockroachdb/redact" + "github.com/gogo/protobuf/proto" + pkgErr "github.com/pkg/errors" +) + +func TestFormatViaRedact(t *testing.T) { + tt := testutils.T{t} + + sm := string(redact.StartMarker()) + em := string(redact.EndMarker()) + + var nilErr error + err := errutil.Newf("hello %s %v", "world", nilErr) + + tt.CheckEqual(string(redact.Sprintf("%v", err)), `hello `+sm+`world`+em+` `) + tt.CheckEqual(string(redact.Sprintf("%v", errbase.Formattable(err))), `hello `+sm+`world`+em+` `) + + err = goErr.New("hello") + expected := sm + `hello` + em + ` +(1) ` + sm + `hello` + em + ` +Error types: (1) *errors.errorString` + tt.CheckEqual(string(redact.Sprintf("%+v", err)), expected) + + expected = sm + `hello` + em + ` +(1) +Wraps: (2) ` + sm + `hello` + em + ` +Error types: (1) *errbase.errorFormatter (2) *errors.errorString` + tt.CheckEqual(string(redact.Sprintf("%+v", errbase.Formattable(err))), expected) + + // Regression test. + f := &fmtWrap{err} + tt.CheckEqual(string(redact.Sprintf("%v", f)), sm+`hello`+em) + expected = sm + `hello` + em + ` +` + sm + `(1) hello` + em + ` +` + sm + `Error types: (1) *errors.errorString` + em + tt.CheckEqual(string(redact.Sprintf("%+v", f)), expected) + + // Regression test 2. + f2 := &fmter{} + tt.CheckEqual(string(redact.Sprintf("%v", f2)), sm+`hello`+em) + tt.CheckEqual(string(redact.Sprintf("%+v", f2)), sm+`hello`+em) + + // Another regression test. + // https://github.com/cockroachdb/redact/issues/12 + var buf redact.StringBuilder + buf.Printf("safe %v", "unsafe") + e := errutil.Newf("%v", buf) + tt.CheckEqual(string(redact.Sprint(e)), `safe `+sm+`unsafe`+em) +} + +type fmtWrap struct { + err error +} + +// Format implements the fmt.Formatter interface. +func (ef *fmtWrap) Format(s fmt.State, verb rune) { errbase.FormatError(ef.err, s, verb) } + +type fmter struct{} + +// Format implements the fmt.Formatter interface. +func (ef *fmter) Format(s fmt.State, verb rune) { _, _ = s.Write([]byte("hello")) } + +func TestFormat(t *testing.T) { + tt := testutils.T{t} + + const woo = `woo` + const waa = `waa` + const mwoo = "woo\nother" + const waawoo = `waa: woo` + const wuuwaawoo = `wuu: waa: woo` + testCases := []struct { + name string + err error + expFmtSimple string + expFmtVerbose string + // We're expecting the result of printing an error with %q + // to be the quoted version of %s in the general case. + // However, the implementation of (*pkgErr.withMessage).Format() + // gets this wrong, so we need a separate ref string for this + // specific case. + expFmtQuote string + }{ + {"nofmt wrap in + nofmt wrap out", + &werrNoFmt{&werrNoFmt{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, wuuwaawoo, ``}, + + {"nofmt wrap in + fmd-old wrap out", + &werrFmto{&werrNoFmt{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, ` +waa: woo +-- this is wuu's +multi-line payload (fmt)`, ``, + }, + + {"nofmt wrap in + fmt wrap out", + &werrFmt{&werrNoFmt{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, ` +wuu: waa: woo +(1) wuu + | -- this is wuu's + | multi-line wrapper payload +Wraps: (2) waa +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *fmttests.werrNoFmt (3) *fmttests.errFmt`, ``, + }, + + {"fmt-old wrap in + nofmt wrap out", + &werrNoFmt{&werrFmto{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, wuuwaawoo, ``}, + + {"fmt-old wrap in + fmd-old wrap out", + &werrFmto{&werrFmto{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, ` +woo +(1) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.errFmt +-- this is waa's +multi-line payload (fmt) +-- this is wuu's +multi-line payload (fmt)`, ``, + }, + + {"fmt-old wrap in + fmt wrap out", + &werrFmt{&werrFmto{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, ` +wuu: waa: woo +(1) wuu + | -- this is wuu's + | multi-line wrapper payload +Wraps: (2) waa +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *fmttests.werrFmto (3) *fmttests.errFmt`, ``, + }, + + {"fmt wrap in + nofmt wrap out", + &werrNoFmt{&werrFmt{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, wuuwaawoo, ``}, + + {"fmt wrap in + fmd-old wrap out", + &werrFmto{&werrFmt{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, ` +waa: woo +(1) waa + | -- this is waa's + | multi-line wrapper payload +Wraps: (2) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *fmttests.errFmt +-- this is wuu's +multi-line payload (fmt)`, ``, + }, + + {"fmt wrap in + fmt wrap out", + &werrFmt{&werrFmt{&errFmt{woo}, waa}, "wuu"}, + wuuwaawoo, ` +wuu: waa: woo +(1) wuu + | -- this is wuu's + | multi-line wrapper payload +Wraps: (2) waa + | -- this is waa's + | multi-line wrapper payload +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *fmttests.werrFmt (3) *fmttests.errFmt`, ``, + }, + + // Compatibility with github.com/pkg/errors. + + {"fmt wrap + pkg msg + fmt leaf", + &werrFmt{pkgErr.WithMessage(&errFmt{woo}, waa), "wuu"}, + wuuwaawoo, ` +wuu: waa: woo +(1) wuu + | -- this is wuu's + | multi-line wrapper payload +Wraps: (2) waa +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *errors.withMessage (3) *fmttests.errFmt`, ``, + }, + + {"fmt wrap + pkg msg1 + pkg.msg2 + fmt leaf", + &werrFmt{ + pkgErr.WithMessage( + pkgErr.WithMessage( + &errFmt{woo}, "waa2"), + "waa1"), + "wuu"}, + `wuu: waa1: waa2: woo`, ` +wuu: waa1: waa2: woo +(1) wuu + | -- this is wuu's + | multi-line wrapper payload +Wraps: (2) waa1 +Wraps: (3) waa2 +Wraps: (4) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *errors.withMessage (3) *errors.withMessage (4) *fmttests.errFmt`, ``, + }, + + {"fmt wrap + pkg stack + fmt leaf", + &werrFmt{pkgErr.WithStack(&errFmt{woo}), waa}, + waawoo, ` +waa: woo +(1) waa + | -- this is waa's + | multi-line wrapper payload +Wraps: (2) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.TestFormat + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *errors.withStack (3) *fmttests.errFmt`, ``, + }, + + {"delegating wrap + pkg stack + fmt leaf", + &werrDelegate{pkgErr.WithStack(&errFmt{woo}), "prefix"}, + "prefix: woo", ` +prefix: woo +(1) prefix + | -- multi-line + | wrapper payload +Wraps: (2) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.TestFormat + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrDelegate (2) *errors.withStack (3) *fmttests.errFmt`, ``, + }, + + {"empty wrap + pkg stack + fmt leaf", + &werrEmpty{pkgErr.WithStack(&errFmt{woo})}, + woo, ` +woo +(1) +Wraps: (2) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.TestFormat + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrEmpty (2) *errors.withStack (3) *fmttests.errFmt`, ``, + }, + + {"empty delegate wrap + pkg stack + fmt leaf", + &werrDelegateEmpty{pkgErr.WithStack(&errFmt{woo})}, + woo, ` +woo +(1) +Wraps: (2) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.TestFormat + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) woo + | -- this is woo's + | multi-line leaf payload +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.withStack (3) *fmttests.errFmt`, ``, + }, + + {"safeformatter leaf", + &errSafeFormat{msg: "world"}, + `safe world`, ` +safe world +(1) safe world +Error types: (1) *fmttests.errSafeFormat`, ``}, + } + + for _, test := range testCases { + tt.Run(test.name, func(tt testutils.T) { + err := test.err + + // %s is simple formatting + tt.CheckStringEqual(fmt.Sprintf("%s", err), test.expFmtSimple) + + // %v is simple formatting too, for compatibility with the past. + tt.CheckStringEqual(fmt.Sprintf("%v", err), test.expFmtSimple) + + // %q is always like %s but quotes the result. + ref := test.expFmtQuote + if ref == "" { + ref = fmt.Sprintf("%q", test.expFmtSimple) + } + tt.CheckStringEqual(fmt.Sprintf("%q", err), ref) + + // %+v is the verbose mode. + refV := strings.TrimPrefix(test.expFmtVerbose, "\n") + spv := fmtClean(fmt.Sprintf("%+v", err)) + tt.CheckStringEqual(spv, refV) + }) + } +} + +func TestHelperForErrorf(t *testing.T) { + origErr := goErr.New("small\nuniverse") + s, e := redact.HelperForErrorf("hello %s", origErr) + if actual, expected := string(s), "hello ‹small›\n‹universe›"; actual != expected { + t.Errorf("expected %q, got %q", expected, actual) + } + if e != nil { + t.Errorf("expected no error, got %v", e) + } + + s, e = redact.HelperForErrorf("hello %w", origErr) + if actual, expected := string(s), "hello ‹small›\n‹universe›"; actual != expected { + t.Errorf("expected %q, got %q", expected, actual) + } + if e != origErr { + t.Errorf("expected error %v, got %v (%T)", origErr, e, e) + } +} + +func fmtClean(spv string) string { + spv = fileref.ReplaceAllString(spv, ":") + spv = libref.ReplaceAllString(spv, "") + spv = stackref.ReplaceAllString(spv, `&stack{...}`) + spv = hexref.ReplaceAllString(spv, "0xAAAABBBB") + spv = strings.ReplaceAll(spv, "\t", "") + spv = funcNN.ReplaceAllString(spv, `...funcNN...`) + + // When running the tests with a Go version before 1.16, + // the reference test output wrt fs.PathError will not match what the + // Go runtime thinks (os.PathError was a separate type). + // + // In that case, we translate the test output as per the old + // runtime into the shape expected in 1.16 or later. + spv = fakeGo116(spv) + + return spv +} + +var funcNN = regexp.MustCompile(`(?m)((\.\.func\d+| func\d+\(\)|\(func\d+\))"?$)|(\.\.func\d+\\n)`) + +var stackref = regexp.MustCompile(`(&(?:errors\.stack|withstack\.stack)\{[^}]*\})`) +var fileref = regexp.MustCompile(`(` + + // Any path ending with .{go,s}:NNN: + `[a-zA-Z0-9\._/@-]+\.(?:go|s):\d+` + + `)`) +var libroot = func() string { + wd, err := os.Getwd() + if err != nil { + panic(err) + } + return filepath.Clean(filepath.Join(wd, "..")) +}() +var libref = regexp.MustCompile( + `((` + + // Any path starting with the errors library root directory: + libroot + + `|` + + // Any path containing the error library: + `(/[a-zA-Z0-9\._/@-]+)+` + + `/github.com/cockroachdb/errors` + + `)` + + // Followed by some directory components: + `(/[a-zA-Z0-9\._/@-]+)*` + + `)`) +var hexref = regexp.MustCompile(`(0x[a-f0-9]{4,})`) + +// errNoFmt does neither implement Format() nor FormatError(). +type errNoFmt struct{ msg string } + +func (e *errNoFmt) Error() string { return e.msg } + +// werrNoFmt does like errNoFmt. This is used to check +// that FormatError() knows about "dumb" error wrappers. +type werrNoFmt struct { + cause error + msg string +} + +func (e *werrNoFmt) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } +func (e *werrNoFmt) Unwrap() error { return e.cause } + +// errFmto has just a Format() method that does everything, and does +// not know about neither FormatError() nor errors.Formatter. +// This is the "old style" support for formatting, e.g. used +// in github.com/pkg/errors. +type errFmto struct{ msg string } + +func (e *errFmto) Error() string { return e.msg } +func (e *errFmto) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprint(s, e.msg) + fmt.Fprintf(s, "\n-- this is %s's\nmulti-line payload", e.msg) + return + } + fallthrough + default: + fmt.Fprintf(s, fmt.Sprintf("%%%s%c", flags(s), verb), e.msg) + } +} + +// errFmtoDelegate is like errFmto but the Error() method delegates to +// Format(). +type errFmtoDelegate struct{ msg string } + +func (e *errFmtoDelegate) Error() string { return fmt.Sprintf("%v", e) } +func (e *errFmtoDelegate) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprint(s, e.msg) + fmt.Fprintf(s, "\n-- this is %s's\nmulti-line payload", e.msg) + return + } + fallthrough + default: + fmt.Fprintf(s, fmt.Sprintf("%%%s%c", flags(s), verb), e.msg) + } +} + +// werrFmto is like errFmto but is a wrapper. +type werrFmto struct { + cause error + msg string +} + +func (e *werrFmto) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } +func (e *werrFmto) Unwrap() error { return e.cause } +func (e *werrFmto) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", e.cause) + fmt.Fprintf(s, "\n-- this is %s's\nmulti-line payload (fmt)", e.msg) + return + } + fallthrough + default: + fmt.Fprintf(s, fmt.Sprintf("%%%s%c", flags(s), verb), e.Error()) + } +} + +// werrFmtoDelegate is like errFmtoDelegate but is a wrapper. +type werrFmtoDelegate struct { + cause error + msg string +} + +func (e *werrFmtoDelegate) Error() string { return fmt.Sprintf("%v", e) } +func (e *werrFmtoDelegate) Unwrap() error { return e.cause } +func (e *werrFmtoDelegate) Format(s fmt.State, verb rune) { + switch verb { + case 'v': + if s.Flag('+') { + fmt.Fprintf(s, "%+v", e.cause) + fmt.Fprintf(s, "\n-- this is %s's\nmulti-line wrapper payload", e.msg) + return + } + fallthrough + default: + fmts := fmt.Sprintf("%%%s%c", flags(s), verb) + fmt.Fprintf(s, fmts, e.msg+": "+e.cause.Error()) + } +} + +// errFmtp implements Format() that forwards to FormatError(), +// but does not implement errors.Formatter. It is used +// to check that FormatError() does the right thing. +type errFmtp struct { + msg string +} + +func (e *errFmtp) Error() string { return e.msg } +func (e *errFmtp) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } + +// werrFmtp is like errFmtp but is a wrapper. +type werrFmtp struct { + cause error + msg string +} + +func (e *werrFmtp) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } +func (e *werrFmtp) Unwrap() error { return e.cause } +func (e *werrFmtp) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } + +// errFmt has both Format() and FormatError(), +// and demonstrates the common case of "rich" errors. +type errFmt struct{ msg string } + +func (e *errFmt) Error() string { return e.msg } +func (e *errFmt) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *errFmt) FormatError(p errbase.Printer) error { + p.Print(e.msg) + if p.Detail() { + p.Printf("-- this is %s's\nmulti-line leaf payload", e.msg) + } + return nil +} + +// werrFmt is like errFmt but is a wrapper. +type werrFmt struct { + cause error + msg string +} + +func (e *werrFmt) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } +func (e *werrFmt) Unwrap() error { return e.cause } +func (e *werrFmt) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *werrFmt) FormatError(p errbase.Printer) error { + p.Print(e.msg) + if p.Detail() { + p.Printf("-- this is %s's\nmulti-line wrapper payload", e.msg) + } + return e.cause +} + +func flags(s fmt.State) string { + flags := "" + if s.Flag('#') { + flags += "#" + } + if s.Flag('+') { + flags += "+" + } + if s.Flag(' ') { + flags += " " + } + return flags +} + +// TestDelegateProtocol checks that there is no infinite recursion +// when Error() delegates its behavior to FormatError(). +func TestDelegateProtocol(t *testing.T) { + tt := testutils.T{t} + + var err error + err = &werrDelegate{&errNoFmt{"woo"}, "prefix"} + tt.CheckStringEqual(fmt.Sprintf("%v", err), "prefix: woo") + + err = &werrDelegateNoPrefix{&errNoFmt{"woo"}} + tt.CheckStringEqual(fmt.Sprintf("%v", err), "woo") +} + +// werrDelegate delegates its Error() behavior to FormatError(). +type werrDelegate struct { + wrapped error + msg string +} + +var _ fmt.Formatter = (*werrDelegate)(nil) +var _ errbase.Formatter = (*werrDelegate)(nil) + +func (e *werrDelegate) Error() string { return fmt.Sprintf("%v", e) } +func (e *werrDelegate) Cause() error { return e.wrapped } +func (e *werrDelegate) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *werrDelegate) FormatError(p errbase.Printer) error { + p.Print(e.msg) + if p.Detail() { + p.Print("-- multi-line\nwrapper payload") + } + return e.wrapped +} + +// werrDelegateNoPrefix delegates its Error() behavior to FormatError() +// via fmt.Format, has no prefix of its own in its short message +// but has a detail field. +type werrDelegateNoPrefix struct { + wrapped error +} + +var _ errbase.Formatter = (*werrDelegateNoPrefix)(nil) +var _ fmt.Formatter = (*werrDelegateNoPrefix)(nil) + +func (e *werrDelegateNoPrefix) Error() string { return fmt.Sprintf("%v", e) } +func (e *werrDelegateNoPrefix) Cause() error { return e.wrapped } +func (e *werrDelegateNoPrefix) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *werrDelegateNoPrefix) FormatError(p errbase.Printer) error { + if p.Detail() { + p.Print("detail") + } + return e.wrapped +} + +// werrDelegateEmpty implements Error via fmt.Formatter using FormatError, +// and has no message nor detail of its own. +type werrDelegateEmpty struct { + wrapped error +} + +var _ errbase.Formatter = (*werrDelegateEmpty)(nil) +var _ fmt.Formatter = (*werrDelegateEmpty)(nil) + +func (e *werrDelegateEmpty) Error() string { return fmt.Sprintf("%v", e) } +func (e *werrDelegateEmpty) Cause() error { return e.wrapped } +func (e *werrDelegateEmpty) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *werrDelegateEmpty) FormatError(p errbase.Printer) error { + return e.wrapped +} + +// werrEmpty has no message of its own. +type werrEmpty struct { + wrapped error +} + +var _ error = (*werrEmpty)(nil) +var _ fmt.Formatter = (*werrEmpty)(nil) + +func (e *werrEmpty) Error() string { return e.wrapped.Error() } +func (e *werrEmpty) Cause() error { return e.wrapped } +func (e *werrEmpty) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } + +// werrWithElidedClause overrides its cause's Error() from its own +// short message. +type werrWithElidedCause struct { + wrapped error + msg string +} + +func (e *werrWithElidedCause) Error() string { return fmt.Sprintf("%v", e) } +func (e *werrWithElidedCause) Cause() error { return e.wrapped } +func (e *werrWithElidedCause) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *werrWithElidedCause) FormatError(p errbase.Printer) error { + p.Print(e.msg) + return nil +} + +// Preserve the type over the network, otherwise the opaqueWrapper +// takes over, and that does not respect the elision. +func encodeWithElidedCause( + _ context.Context, err error, +) (prefix string, _ []string, _ proto.Message, _ errbase.MessageType) { + m := err.(*werrWithElidedCause) + return m.msg, nil, nil, errbase.FullMessage +} + +func decodeWithElidedCause( + _ context.Context, cause error, msg string, _ []string, _ proto.Message, +) error { + return &werrWithElidedCause{cause, msg} +} + +func init() { + errbase.RegisterWrapperEncoderWithMessageType(errbase.GetTypeKey(&werrWithElidedCause{}), encodeWithElidedCause) + errbase.RegisterWrapperDecoder(errbase.GetTypeKey(&werrWithElidedCause{}), decodeWithElidedCause) +} + +type werrMigrated struct { + cause error +} + +func (w *werrMigrated) Error() string { return w.cause.Error() } +func (w *werrMigrated) Cause() error { return w.cause } +func (w *werrMigrated) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } + +func init() { + errbase.RegisterTypeMigration("some/previous/path", "prevpkg.prevType", (*werrMigrated)(nil)) +} + +type errSafeFormat struct { + msg string +} + +func (e *errSafeFormat) Error() string { return fmt.Sprint(e) } +func (e *errSafeFormat) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *errSafeFormat) SafeFormatError(p errbase.Printer) (next error) { + p.Printf("safe %s", e.msg) + return nil +} + +type werrSafeFormat struct { + cause error + msg string +} + +func (w *werrSafeFormat) Cause() error { return w.cause } +func (w *werrSafeFormat) Error() string { return fmt.Sprint(w) } +func (w *werrSafeFormat) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } +func (w *werrSafeFormat) SafeFormatError(p errbase.Printer) (next error) { + p.Printf("safe %s", w.msg) + return w.cause +} + +type errMultiCause struct { + causes []error + msg string + elide bool +} + +func newMultiCause(msg string, elide bool, causes ...error) *errMultiCause { + return &errMultiCause{ + causes: causes, + msg: msg, + elide: elide, + } +} + +func (e *errMultiCause) Error() string { return fmt.Sprint(e) } +func (e *errMultiCause) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } +func (e *errMultiCause) SafeFormatError(p errbase.Printer) (next error) { + p.Printf("%s", e.msg) + if e.elide { + return nil + } else { + return e.causes[0] + } +} +func (e *errMultiCause) Unwrap() []error { return e.causes } + +func init() { + errbase.RegisterMultiCauseEncoder(errbase.GetTypeKey(&errMultiCause{}), encodeWithMultiCause) + errbase.RegisterMultiCauseDecoder(errbase.GetTypeKey(&errMultiCause{}), decodeWithMultiCause) +} + +func encodeWithMultiCause( + _ context.Context, err error, +) (string, []string, proto.Message) { + m := err.(*errMultiCause) + if m.elide { + return m.msg, []string{"elide"}, nil + } else { + return m.msg, nil, nil + } +} + +func decodeWithMultiCause( + _ context.Context, causes []error, msg string, details []string, _ proto.Message, +) error { + elide := false + if len(details) == 1 && details[0] == "elide" { + elide = true + } + return &errMultiCause{causes, msg, elide} +} diff --git a/fmttests/testdata/format/leaves b/fmttests/testdata/format/leaves new file mode 100644 index 0000000..35fcb7e --- /dev/null +++ b/fmttests/testdata/format/leaves @@ -0,0 +1,1758 @@ +run +assertion oneline twoline + +require (?s)oneline.*twoline +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"assertmsg ‹oneline›\n‹twoline›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"assertmsg ‹oneline›\n‹twoline›"}, + stack: &stack{...}, + }, +} +== Error() +assertmsg oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg oneline +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func17 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg oneline + | twoline +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg ‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg ‹oneline› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func17 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg ‹oneline› + | ‹twoline› +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func17 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg × + | × +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: assertmsg × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: assertmsg ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +ctx-canceled oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"context canceled"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"context canceled"} +== Error() +context canceled +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +context canceled +(1) context canceled +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +context canceled +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +context canceled +(1) context canceled +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +context canceled +(1) context canceled +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "context canceled" +(NO STACKTRACE) + +run +ctx-deadline oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +context.deadlineExceededError{} +===== +===== non-redactable formats +===== +== %#v +context.deadlineExceededError{} +== Error() +context deadline exceeded +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +context deadline exceeded +(1) context deadline exceeded +Error types: (1) context.deadlineExceededError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +context deadline exceeded +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +context deadline exceeded +(1) context deadline exceeded +Error types: (1) context.deadlineExceededError +===== +===== Sentry reporting +===== +== Message payload +context deadline exceeded +(1) context deadline exceeded +Error types: (1) context.deadlineExceededError +-- report composition: +context.deadlineExceededError +== Extra "error types" +context/context.deadlineExceededError (*::) +== Exception 1 (Module: "error domain: ") +Type: "context.deadlineExceededError" +Title: "context deadline exceeded" +(NO STACKTRACE) + +run +fmt oneline twoline + +require (?s)oneline.*twoline +---- +&fmttests.errFmt{msg:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errFmt{msg:"oneline\ntwoline"} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | -- this is oneline + | twoline's + | multi-line leaf payload +Error types: (1) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› +‹ | twoline› +‹ | -- this is oneline› +‹ | twoline's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +× +× +Error types: (1) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt-old oneline twoline + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)oneline.*twoline +---- +&fmttests.errFmto{msg:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +"oneline\ntwoline" +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +twoline +-- this is oneline +twoline's +multi-line payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.errFmto{msg:"oneline\ntwoline"} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +oneline +(1) oneline + | twoline +Error types: (1) *fmttests.errFmto +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹oneline› +(1) ‹oneline› +‹ | twoline› +Error types: (1) *fmttests.errFmto +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Error types: (1) *fmttests.errFmto +-- report composition: +*fmttests.errFmto +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmto" +Title: "×" +(NO STACKTRACE) + +run +fmt-old-delegate oneline twoline + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)oneline.*twoline +---- +&fmttests.errFmtoDelegate{msg:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +"oneline\ntwoline" +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +twoline +-- this is oneline +twoline's +multi-line payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.errFmtoDelegate{msg:"oneline\ntwoline"} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +oneline +(1) oneline + | twoline +Error types: (1) *fmttests.errFmtoDelegate +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹oneline› +(1) ‹oneline› +‹ | twoline› +Error types: (1) *fmttests.errFmtoDelegate +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Error types: (1) *fmttests.errFmtoDelegate +-- report composition: +*fmttests.errFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmtoDelegate" +Title: "×" +(NO STACKTRACE) + +run +fmt-partial oneline twoline + +require (?s)oneline.*twoline +---- +&fmttests.errFmtp{msg:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errFmtp{msg:"oneline\ntwoline"} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline +Error types: (1) *fmttests.errFmtp +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› +‹ | twoline› +Error types: (1) *fmttests.errFmtp +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Error types: (1) *fmttests.errFmtp +-- report composition: +*fmttests.errFmtp +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmtp" +Title: "×" +(NO STACKTRACE) + +run +goerr oneline twoline + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)oneline.*twoline +---- +&errors.errorString{s:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"oneline\ntwoline"} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +oneline +(1) oneline + | twoline +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹oneline› +(1) ‹oneline› +‹ | twoline› +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +newf oneline twoline + +require (?s)oneline.*twoline +---- +&withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›"}, + stack: &stack{...}, +} +== Error() +new-style oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style oneline +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style oneline + | twoline +Error types: (1) *withstack.withStack (2) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹oneline› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style ‹oneline› + | ‹twoline› +Error types: (1) *withstack.withStack (2) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style × + | × +Error types: (1) *withstack.withStack (2) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf-attached oneline twoline + +require (?s)oneline.*twoline +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›: payload"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›: payload"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style oneline +twoline: payload +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style oneline +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func18 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func18 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style oneline + | twoline: payload +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹oneline› +‹twoline›: payload +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹oneline› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func18 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func18 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style ‹oneline› + | ‹twoline›: payload +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func18 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func18 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style × + | ×: payload +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)oneline.*twoline +---- +&fmttests.errNoFmt{msg:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errNoFmt{msg:"oneline\ntwoline"} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +oneline +(1) oneline + | twoline +Error types: (1) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹oneline› +(1) ‹oneline› +‹ | twoline› +Error types: (1) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Error types: (1) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +os-closed oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"file already closed"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"file already closed"} +== Error() +file already closed +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +file already closed +(1) file already closed +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +file already closed +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +file already closed +(1) file already closed +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +file already closed +(1) file already closed +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "file already closed" +(NO STACKTRACE) + +run +os-exist oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"file already exists"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"file already exists"} +== Error() +file already exists +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +file already exists +(1) file already exists +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +file already exists +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +file already exists +(1) file already exists +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +file already exists +(1) file already exists +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "file already exists" +(NO STACKTRACE) + +run +os-invalid oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"invalid argument"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"invalid argument"} +== Error() +invalid argument +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +invalid argument +(1) invalid argument +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +invalid argument +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +invalid argument +(1) invalid argument +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +invalid argument +(1) invalid argument +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "invalid argument" +(NO STACKTRACE) + +run +os-notexist oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"file does not exist"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"file does not exist"} +== Error() +file does not exist +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +file does not exist +(1) file does not exist +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +file does not exist +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +file does not exist +(1) file does not exist +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +file does not exist +(1) file does not exist +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "file does not exist" +(NO STACKTRACE) + +run +os-permission oneline twoline +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"permission denied"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"permission denied"} +== Error() +permission denied +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +permission denied +(1) permission denied +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +permission denied +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +permission denied +(1) permission denied +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +permission denied +(1) permission denied +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "permission denied" +(NO STACKTRACE) + +run +pkgerr oneline twoline + +accept %x.*IRREGULAR: not same as hex Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)oneline.*twoline +---- +&errors.fundamental{ + msg: "oneline\ntwoline", + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +oneline +twoline +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +oneline +twoline +github.com/cockroachdb/errors/fmttests.init.func9 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.fundamental{ + msg: "oneline\ntwoline", + stack: &stack{...}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +oneline +(1) oneline + | twoline + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹oneline› +(1) ‹oneline› +‹ | twoline› + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +safefmt oneline twoline + +require (?s)oneline.*twoline +---- +&fmttests.errSafeFormat{msg:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errSafeFormat{msg:"oneline\ntwoline"} +== Error() +safe oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe oneline +(1) safe oneline + | twoline +Error types: (1) *fmttests.errSafeFormat +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +safe ‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +safe ‹oneline› +(1) safe ‹oneline› + | ‹twoline› +Error types: (1) *fmttests.errSafeFormat +===== +===== Sentry reporting +===== +== Message payload +safe × +(1) safe × + | × +Error types: (1) *fmttests.errSafeFormat +-- report composition: +*fmttests.errSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errSafeFormat" +Title: "safe ×" +(NO STACKTRACE) + +run +unimplemented oneline twoline + +require (?s)oneline.*twoline +---- +&issuelink.unimplementedError{ + msg: "oneline\ntwoline", + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"issuedetails"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.unimplementedError{ + msg: "oneline\ntwoline", + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"issuedetails"}, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | unimplemented + | issue: https://mysite + | detail: issuedetails +Error types: (1) *issuelink.unimplementedError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | unimplemented + | issue: https://mysite + | detail: issuedetails +Error types: (1) *issuelink.unimplementedError +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | unimplemented + | issue: https://mysite + | detail: issuedetails +Error types: (1) *issuelink.unimplementedError +-- report composition: +*issuelink.unimplementedError: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/issuelink/*issuelink.unimplementedError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*issuelink.unimplementedError" +Title: "×" +(NO STACKTRACE) diff --git a/fmttests/testdata/format/leaves-via-network b/fmttests/testdata/format/leaves-via-network new file mode 100644 index 0000000..b6211b8 --- /dev/null +++ b/fmttests/testdata/format/leaves-via-network @@ -0,0 +1,1990 @@ +run +assertion oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"assertmsg ‹oneline›\n‹twoline›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func17\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"assertmsg ‹oneline›\n‹twoline›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func17\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +assertmsg oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg oneline +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func17 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg oneline + | twoline +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg ‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg ‹oneline› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func17 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg ‹oneline› + | ‹twoline› +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func17 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg × + | × +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: assertmsg × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: assertmsg ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +ctx-canceled oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"context canceled"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"context canceled"} +== Error() +context canceled +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +context canceled +(1) context canceled +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +context canceled +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +context canceled +(1) context canceled +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +context canceled +(1) context canceled +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "context canceled" +(NO STACKTRACE) + +run +ctx-deadline oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +context.deadlineExceededError{} +===== +===== non-redactable formats +===== +== %#v +context.deadlineExceededError{} +== Error() +context deadline exceeded +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +context deadline exceeded +(1) context deadline exceeded +Error types: (1) context.deadlineExceededError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +context deadline exceeded +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +context deadline exceeded +(1) context deadline exceeded +Error types: (1) context.deadlineExceededError +===== +===== Sentry reporting +===== +== Message payload +context deadline exceeded +(1) context deadline exceeded +Error types: (1) context.deadlineExceededError +-- report composition: +context.deadlineExceededError +== Extra "error types" +context/context.deadlineExceededError (*::) +== Exception 1 (Module: "error domain: ") +Type: "context.deadlineExceededError" +Title: "context deadline exceeded" +(NO STACKTRACE) + +run +fmt oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt-old oneline twoline +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmto +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmto +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmto +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmto +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmto" +Title: "×" +(NO STACKTRACE) + +run +fmt-old-delegate oneline twoline +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmtoDelegate" +Title: "×" +(NO STACKTRACE) + +run +fmt-partial oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmtp +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmtp" +Title: "×" +(NO STACKTRACE) + +run +goerr oneline twoline +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)oneline.*twoline +---- +&errors.errorString{s:"oneline\ntwoline"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"oneline\ntwoline"} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +oneline +(1) oneline + | twoline +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹oneline› +(1) ‹oneline› +‹ | twoline› +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +newf oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style oneline +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style oneline + | twoline +Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹oneline› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style ‹oneline› + | ‹twoline› +Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf-attached oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›: payload"}, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func18\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func18\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.leafError{msg:"new-style ‹oneline›\n‹twoline›: payload"}, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func18\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func18\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style oneline +twoline: payload +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style oneline +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func18 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func18 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style oneline + | twoline: payload +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹oneline› +‹twoline›: payload +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹oneline› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func18 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func18 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style ‹oneline› + | ‹twoline›: payload +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func18 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func18 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style × + | ×: payload +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +os-closed oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"file already closed"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"file already closed"} +== Error() +file already closed +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +file already closed +(1) file already closed +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +file already closed +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +file already closed +(1) file already closed +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +file already closed +(1) file already closed +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "file already closed" +(NO STACKTRACE) + +run +os-exist oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"file already exists"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"file already exists"} +== Error() +file already exists +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +file already exists +(1) file already exists +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +file already exists +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +file already exists +(1) file already exists +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +file already exists +(1) file already exists +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "file already exists" +(NO STACKTRACE) + +run +os-invalid oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"invalid argument"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"invalid argument"} +== Error() +invalid argument +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +invalid argument +(1) invalid argument +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +invalid argument +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +invalid argument +(1) invalid argument +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +invalid argument +(1) invalid argument +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "invalid argument" +(NO STACKTRACE) + +run +os-notexist oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"file does not exist"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"file does not exist"} +== Error() +file does not exist +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +file does not exist +(1) file does not exist +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +file does not exist +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +file does not exist +(1) file does not exist +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +file does not exist +(1) file does not exist +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "file does not exist" +(NO STACKTRACE) + +run +os-permission oneline twoline +opaque +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +---- +&errors.errorString{s:"permission denied"} +===== +===== non-redactable formats +===== +== %#v +&errors.errorString{s:"permission denied"} +== Error() +permission denied +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +permission denied +(1) permission denied +Error types: (1) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +permission denied +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +permission denied +(1) permission denied +Error types: (1) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +permission denied +(1) permission denied +Error types: (1) *errors.errorString +-- report composition: +*errors.errorString +== Extra "error types" +errors/*errors.errorString (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "permission denied" +(NO STACKTRACE) + +run +pkgerr oneline twoline +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +safefmt oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&errbase.opaqueLeaf{ + msg: "safe oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "safe oneline\ntwoline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +safe oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe oneline +(1) safe oneline + | twoline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹safe oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹safe oneline› +(1) ‹safe oneline› + | ‹twoline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errSafeFormat" +Title: "×" +(NO STACKTRACE) + +run +unimplemented oneline twoline +opaque + +require (?s)oneline.*twoline +---- +&issuelink.unimplementedError{ + msg: "oneline\ntwoline", + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"issuedetails"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.unimplementedError{ + msg: "oneline\ntwoline", + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"issuedetails"}, +} +== Error() +oneline +twoline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +oneline +(1) oneline + | twoline + | unimplemented + | issue: https://mysite + | detail: issuedetails +Error types: (1) *issuelink.unimplementedError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹oneline› +‹twoline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹oneline› +(1) ‹oneline› + | ‹twoline› + | unimplemented + | issue: https://mysite + | detail: issuedetails +Error types: (1) *issuelink.unimplementedError +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | unimplemented + | issue: https://mysite + | detail: issuedetails +Error types: (1) *issuelink.unimplementedError +-- report composition: +*issuelink.unimplementedError: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/issuelink/*issuelink.unimplementedError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*issuelink.unimplementedError" +Title: "×" +(NO STACKTRACE) diff --git a/fmttests/testdata/format/opaque b/fmttests/testdata/format/opaque new file mode 100644 index 0000000..118dc85 --- /dev/null +++ b/fmttests/testdata/format/opaque @@ -0,0 +1,833 @@ +run +nofmt inner inner2ndline +opaque +---- +&errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +} +== Error() +inner +inner2ndline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +inner +(1) inner + | inner2ndline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹inner› +‹inner2ndline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹inner› +(1) ‹inner› + | ‹inner2ndline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt inner inner2ndline +opaque +fmt outer outer2ndline +---- +&fmttests.werrFmt{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outer\nouter2ndline", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outer\nouter2ndline", +} +== Error() +outer +outer2ndline: inner +inner2ndline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outer: inner +(1) outer + | outer2ndline + | -- this is outer + | outer2ndline's + | multi-line wrapper payload +Wraps: (2) inner + | inner2ndline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outer› +‹outer2ndline›: ‹inner› +‹inner2ndline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outer›: ‹inner› +(1) ‹outer› +‹ | outer2ndline› +‹ | -- this is outer› +‹ | outer2ndline's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹inner› + | ‹inner2ndline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt inner inner2ndline +nofmt outer outer2ndline +opaque +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outer\nouter2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outer\nouter2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outer +outer2ndline: inner +inner2ndline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outer: inner +(1) outer + | outer2ndline + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) inner + | inner2ndline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outer› +‹outer2ndline›: ‹inner› +‹inner2ndline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outer›: ‹inner› +(1) ‹outer› + | ‹outer2ndline› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) ‹inner› + | ‹inner2ndline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt inner inner2ndline +nofmt middle middle2ndline +opaque +fmt outer outer2ndline +---- +&fmttests.werrFmt{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "middle\nmiddle2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "outer\nouter2ndline", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "middle\nmiddle2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "outer\nouter2ndline", +} +== Error() +outer +outer2ndline: middle +middle2ndline: inner +inner2ndline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outer: middle: inner +(1) outer + | outer2ndline + | -- this is outer + | outer2ndline's + | multi-line wrapper payload +Wraps: (2) middle + | middle2ndline + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) inner + | inner2ndline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueWrapper (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outer› +‹outer2ndline›: ‹middle› +‹middle2ndline›: ‹inner› +‹inner2ndline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outer›: ‹middle›: ‹inner› +(1) ‹outer› +‹ | outer2ndline› +‹ | -- this is outer› +‹ | outer2ndline's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹middle› + | ‹middle2ndline› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) ‹inner› + | ‹inner2ndline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueWrapper (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: × +(1) × +× +× +× +× +Wraps: (2) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueWrapper (3) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrNoFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×: ×" +(NO STACKTRACE) + +run +nofmt inner inner2ndline +nofmt middle middle2ndline +nofmt outer outer2ndline +opaque +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "middle\nmiddle2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outer\nouter2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "middle\nmiddle2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outer\nouter2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outer +outer2ndline: middle +middle2ndline: inner +inner2ndline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outer: middle: inner +(1) outer + | outer2ndline + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) middle + | middle2ndline + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) inner + | inner2ndline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outer› +‹outer2ndline›: ‹middle› +‹middle2ndline›: ‹inner› +‹inner2ndline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outer›: ‹middle›: ‹inner› +(1) ‹outer› + | ‹outer2ndline› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) ‹middle› + | ‹middle2ndline› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) ‹inner› + | ‹inner2ndline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrNoFmt +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×: ×" +(NO STACKTRACE) + +run +nofmt inner inner2ndline +nofmt middle middle2ndline +nofmt outer outer2ndline +opaque +fmt extern extern2ndline +---- +&fmttests.werrFmt{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "middle\nmiddle2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outer\nouter2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "extern\nextern2ndline", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "inner\ninner2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "middle\nmiddle2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outer\nouter2ndline", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "extern\nextern2ndline", +} +== Error() +extern +extern2ndline: outer +outer2ndline: middle +middle2ndline: inner +inner2ndline +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +extern: outer: middle: inner +(1) extern + | extern2ndline + | -- this is extern + | extern2ndline's + | multi-line wrapper payload +Wraps: (2) outer + | outer2ndline + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) middle + | middle2ndline + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (4) inner + | inner2ndline + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueWrapper (3) *errbase.opaqueWrapper (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹extern› +‹extern2ndline›: ‹outer› +‹outer2ndline›: ‹middle› +‹middle2ndline›: ‹inner› +‹inner2ndline› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹extern›: ‹outer›: ‹middle›: ‹inner› +(1) ‹extern› +‹ | extern2ndline› +‹ | -- this is extern› +‹ | extern2ndline's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹outer› + | ‹outer2ndline› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) ‹middle› + | ‹middle2ndline› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (4) ‹inner› + | ‹inner2ndline› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueWrapper (3) *errbase.opaqueWrapper (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: × +(1) × +× +× +× +× +Wraps: (2) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (3) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrFmt (2) *errbase.opaqueWrapper (3) *errbase.opaqueWrapper (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrNoFmt +*fmttests.werrNoFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×: ×: ×" +(NO STACKTRACE) diff --git a/fmttests/testdata/format/wrap-fmt b/fmttests/testdata/format/wrap-fmt new file mode 100644 index 0000000..1a159fe --- /dev/null +++ b/fmttests/testdata/format/wrap-fmt @@ -0,0 +1,6004 @@ +run +fmt innerone innertwo +assertion outerthree outerfour + +require (?s) +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | -- this is innerone + | | innertwo's + | | multi-line leaf payload + | Error types: (1) *fmttests.errFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | ‹ | -- this is innerone› + | ‹ | innertwo's› + | ‹ | multi-line leaf payload› + | Error types: (1) *fmttests.errFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | × + | × + | × + | Error types: (1) *fmttests.errFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +assertwrap outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | -- this is innerone + | | innertwo's + | | multi-line leaf payload + | Error types: (1) *fmttests.errFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | ‹ | -- this is innerone› + | ‹ | innertwo's› + | ‹ | multi-line leaf payload› + | Error types: (1) *fmttests.errFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | × + | × + | × + | Error types: (1) *fmttests.errFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +barrier outerthree outerfour + +require (?s) +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | -- this is innerone + | | innertwo's + | | multi-line leaf payload + | Error types: (1) *fmttests.errFmt +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | ‹ | -- this is innerone› + | ‹ | innertwo's› + | ‹ | multi-line leaf payload› + | Error types: (1) *fmttests.errFmt +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | × + | × + | × + | Error types: (1) *fmttests.errFmt +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +delegate outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrDelegate{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegate{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- multi-line + | wrapper payload +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrDelegate (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- multi-line› +‹ | wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrDelegate (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrDelegate (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +delegate-empty outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateEmpty{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateEmpty{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrDelegateEmpty (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrDelegateEmpty (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrDelegateEmpty (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +delegate-noprefix outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateNoPrefix{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateNoPrefix{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) detail +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹detail› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +detail outerthree outerfour + +require (?s) +---- +&hintdetail.withDetail{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *hintdetail.withDetail (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *hintdetail.withDetail (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *hintdetail.withDetail (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*hintdetail.withDetail +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *domains.withDomain (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *domains.withDomain (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) mydomain +Wraps: (2) × +× +× +× +× +Error types: (1) *domains.withDomain (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*domains.withDomain: mydomain +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrWithElidedCause (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrWithElidedCause (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrWithElidedCause (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +empty outerthree outerfour + +require (?s) +---- +&fmttests.werrEmpty{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrEmpty{ + wrapped: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrEmpty (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrEmpty (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrEmpty (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmt{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- this is outerthree + | outerfour's + | multi-line wrapper payload +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmt (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- this is outerthree› +‹ | outerfour's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrFmt (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrFmt (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt-old outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmto{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errFmt +-- this is outerthree +outerfour's +multi-line payload (fmt) +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmto{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmto (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrFmto (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrFmto (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrFmto +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt-old-delegate outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtoDelegate{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errFmt +-- this is outerthree +outerfour's +multi-line wrapper payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmtoDelegate{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmtoDelegate (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrFmtoDelegate (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrFmtoDelegate (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt-partial outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtp{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmtp{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrFmtp (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrFmtp (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrFmtp (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrFmtp +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +go-errorf outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour - innerone\ninnertwo", err:(*fmttests.errFmt)(0xAAAABBBB)} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*fmttests.errFmt)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.init.func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +× +× +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errFmt +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.errFmt +*fmt.wrapErrors +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +go-errorf-suffix outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s).*outerthree.*outerfour +---- +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"innerone\ninnertwo - outerthree\nouterfour", err:(*fmttests.errFmt)(0xAAAABBBB)} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) innerone + | innertwo - outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) ‹innerone› +‹ | innertwo - outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +goerr outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour: innerone\ninnertwo", err:(*fmttests.errFmt)(0xAAAABBBB)} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmt.wrapError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +handled-domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | -- this is innerone + | | innertwo's + | | multi-line leaf payload + | Error types: (1) *fmttests.errFmt +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | ‹ | -- this is innerone› + | ‹ | innertwo's› + | ‹ | multi-line leaf payload› + | Error types: (1) *fmttests.errFmt +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | × + | × + | × + | Error types: (1) *fmttests.errFmt +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +hint outerthree outerfour + +require (?s) +---- +&hintdetail.withHint{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *hintdetail.withHint (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *hintdetail.withHint (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *hintdetail.withHint (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*hintdetail.withHint +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +issuelink outerthree outerfour + +require (?s) +---- +&issuelink.withIssueLink{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *issuelink.withIssueLink (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *issuelink.withIssueLink (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × +× +× +× +× +Error types: (1) *issuelink.withIssueLink (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +× +× +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errFmt +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errFmt +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +migrated outerthree outerfour + +require (?s) +---- +&fmttests.werrMigrated{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrMigrated{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrMigrated (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrMigrated (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrMigrated (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrMigrated +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +msg outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&errutil.withPrefix{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *errutil.withPrefix (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *errutil.withPrefix (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × +× +× +× +× +Error types: (1) *errutil.withPrefix (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "outerthree: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errFmt +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +newfw outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | -- this is innerone + | | innertwo's + | | multi-line leaf payload + | Error types: (1) *fmttests.errFmt +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | ‹ | -- this is innerone› + | ‹ | innertwo's› + | ‹ | multi-line leaf payload› + | Error types: (1) *fmttests.errFmt +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | × + | × + | × + | Error types: (1) *fmttests.errFmt +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × +× +× +× +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +newfw-suffix outerthree outerfour + +require (?s).*outerthree.*outerfour +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | -- this is innerone + | | innertwo's + | | multi-line leaf payload + | Error types: (1) *fmttests.errFmt +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | ‹ | -- this is innerone› + | ‹ | innertwo's› + | ‹ | multi-line leaf payload› + | Error types: (1) *fmttests.errFmt +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | × + | × + | × + | Error types: (1) *fmttests.errFmt +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × +× +× +× +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*errutil.withNewMessage: :: × +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: :: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +nofmt outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrNoFmt{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrNoFmt{cause:(*fmttests.errFmt)(0xAAAABBBB), msg:"outerthree\nouterfour"} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrNoFmt{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrNoFmt (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrNoFmt (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrNoFmt (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-link outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:&fmttests.errFmt{msg:"innerone\ninnertwo"}} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *os.LinkError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *os.LinkError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +link × ×: × +(1) link × × +Wraps: (2) × +× +× +× +× +Error types: (1) *os.LinkError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*os.LinkError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "link × ×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-netop outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&net.OpError{Op:"send", Net:"tcp", Source:net.Addr(nil), Addr:(*net.UnixAddr)(0xAAAABBBB), Err:&fmttests.errFmt{msg:"innerone\ninnertwo"}} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +send tcp unixhello: innerone +(1) send tcp unixhello +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *net.OpError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +send tcp ‹unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +send tcp ‹unixhello›: ‹innerone› +(1) send tcp ‹unixhello› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *net.OpError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +send tcp ×: × +(1) send tcp × +Wraps: (2) × +× +× +× +× +Error types: (1) *net.OpError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*net.OpError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "send tcp ×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-path outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:&fmttests.errFmt{msg:"innerone\ninnertwo"}} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fs.PathError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fs.PathError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +link ×: × +(1) link × +Wraps: (2) × +× +× +× +× +Error types: (1) *fs.PathError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fs.PathError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "link ×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-syscall outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.SyscallError{ + Syscall: "open", + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:&fmttests.errFmt{msg:"innerone\ninnertwo"}} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &fmttests.errFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *os.SyscallError (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *os.SyscallError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +open: × +(1) open +Wraps: (2) × +× +× +× +× +Error types: (1) *os.SyscallError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*os.SyscallError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "open: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +pkgmsg outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.* +---- +&errors.withMessage{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +(1) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errFmt +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *errors.withMessage (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *errors.withMessage (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +× +× +× +Error types: (1) *errors.withMessage (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*errors.withMessage +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +pkgstack outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s) +---- +&errors.withStack{ + error: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +innerone +innertwo +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +(1) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.errFmt +github.com/cockroachdb/errors/fmttests.init.func30 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withStack{ + error: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *errors.withStack (2) *fmttests.errFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *errors.withStack (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +× +× +× +Error types: (1) *errors.withStack (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +:: *errors.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: ×\nvia *errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +safedetails outerthree outerfour + +require (?s) +---- +&safedetails.withSafeDetails{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *safedetails.withSafeDetails (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *safedetails.withSafeDetails (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) safe × + | × +Wraps: (2) × +× +× +× +× +Error types: (1) *safedetails.withSafeDetails (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +safefmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrSafeFormat{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrSafeFormat{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *fmttests.werrSafeFormat (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +safe ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +safe ‹outerthree›: ‹innerone› +(1) safe ‹outerthree› + | ‹outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *fmttests.werrSafeFormat (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +safe ×: × +(1) safe × + | × +Wraps: (2) × +× +× +× +× +Error types: (1) *fmttests.werrSafeFormat (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*fmttests.werrSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "safe ×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +secondary outerthree outerfour + +require (?s) +---- +&secondary.withSecondaryError{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *secondary.withSecondaryError (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *secondary.withSecondaryError (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) × +× +× +× +× +Error types: (1) *secondary.withSecondaryError (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +stack outerthree outerfour + +require (?s) +---- +&withstack.withStack{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *withstack.withStack (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *withstack.withStack (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +× +× +× +Error types: (1) *withstack.withStack (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +tags outerthree outerfour + +require (?s) +---- +&contexttags.withContext{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *contexttags.withContext (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=456] +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *contexttags.withContext (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) tags: [k×,safe=456] +Wraps: (2) × +× +× +× +× +Error types: (1) *contexttags.withContext (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*contexttags.withContext: k× +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +telemetry outerthree outerfour + +require (?s) +---- +&telemetrykeys.withTelemetry{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *telemetrykeys.withTelemetry (2) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *telemetrykeys.withTelemetry (2) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × +× +× +× +× +Error types: (1) *telemetrykeys.withTelemetry (2) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +wrapf outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × +× +× +× +× +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: new-stylew ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +wrapf-attached outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &fmttests.errFmt{msg:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo + | -- this is innerone + | innertwo's + | multi-line leaf payload +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *fmttests.errFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | -- this is innerone› +‹ | innertwo's› +‹ | multi-line leaf payload› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *fmttests.errFmt +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × +× +× +× +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *fmttests.errFmt +-- report composition: +*fmttests.errFmt +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: new-style ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-fmt-via-network b/fmttests/testdata/format/wrap-fmt-via-network new file mode 100644 index 0000000..8cb4e6b --- /dev/null +++ b/fmttests/testdata/format/wrap-fmt-via-network @@ -0,0 +1,7619 @@ +run +fmt innerone innertwo +assertion outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +assertwrap outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +barrier outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +delegate outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +delegate-empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +delegate-noprefix outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +detail outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withDetail{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*hintdetail.withDetail +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) mydomain +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*domains.withDomain: mydomain +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt-old outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrFmto +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt-old-delegate outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +fmt-partial outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrFmtp +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +go-errorf outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.errFmt +*fmt.wrapErrors +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +go-errorf-suffix outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo - outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo - outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +goerr outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +handled-domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +hint outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withHint{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*hintdetail.withHint +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +issuelink outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&issuelink.withIssueLink{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errFmt +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +migrated outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrMigrated +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +msg outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "outerthree: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +newfw outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +newfw-suffix outerthree outerfour +opaque + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*errutil.withNewMessage: :: × +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: :: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +nofmt outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-link outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +link × ×: × +(1) link × × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*os.LinkError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "link × ×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-netop outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +send tcp unixhello: innerone +(1) send tcp unixhello + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹send tcp unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹send tcp unixhello›: ‹innerone› +(1) ‹send tcp unixhello› + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*net.OpError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-path outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +link ×: × +(1) link × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fs.PathError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "link ×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +os-syscall outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +open: × +(1) open +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*os.SyscallError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "open: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +pkgmsg outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errors.withMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +(1) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueLeaf +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*errors.withMessage +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +pkgstack outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +:: *errors.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: ×\nvia *errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +safedetails outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&safedetails.withSafeDetails{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) safe × + | × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +safefmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹safe outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹safe outerthree›: ‹innerone› +(1) ‹safe outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*fmttests.werrSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +fmt innerone innertwo +secondary outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&secondary.withSecondaryError{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +stack outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +tags outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&contexttags.withContext{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=‹456›] +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) tags: [k×,safe=×] +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*contexttags.withContext: k× +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +telemetry outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errFmt" +Title: "×" +(NO STACKTRACE) + +run +fmt innerone innertwo +wrapf outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: new-stylew ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +fmt innerone innertwo +wrapf-attached outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errFmt +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errFmt: new-style ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-goerr b/fmttests/testdata/format/wrap-goerr new file mode 100644 index 0000000..1b05982 --- /dev/null +++ b/fmttests/testdata/format/wrap-goerr @@ -0,0 +1,5579 @@ +run +goerr innerone innertwo +assertion outerthree outerfour + +require (?s) +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +assertwrap outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +barrier outerthree outerfour + +require (?s) +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +delegate outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrDelegate{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegate{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- multi-line + | wrapper payload +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrDelegate (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- multi-line› +‹ | wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrDelegate (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrDelegate (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrDelegate +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +delegate-empty outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateEmpty{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateEmpty{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrDelegateEmpty +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +delegate-noprefix outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateNoPrefix{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateNoPrefix{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) detail +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹detail› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +Wraps: (2) × +× +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrDelegateNoPrefix +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +detail outerthree outerfour + +require (?s) +---- +&hintdetail.withDetail{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *hintdetail.withDetail (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *hintdetail.withDetail (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *hintdetail.withDetail (2) *errors.errorString +-- report composition: +*errors.errorString +*hintdetail.withDetail +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo +Error types: (1) *domains.withDomain (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *domains.withDomain (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) mydomain +Wraps: (2) × +× +Error types: (1) *domains.withDomain (2) *errors.errorString +-- report composition: +*errors.errorString +*domains.withDomain: mydomain +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrWithElidedCause +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +empty outerthree outerfour + +require (?s) +---- +&fmttests.werrEmpty{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrEmpty{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrEmpty (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrEmpty (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +Error types: (1) *fmttests.werrEmpty (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrEmpty +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmt{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- this is outerthree + | outerfour's + | multi-line wrapper payload +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmt (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- this is outerthree› +‹ | outerfour's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmt (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmt (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmt +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt-old outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmto{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +innertwo +-- this is outerthree +outerfour's +multi-line payload (fmt) +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmto{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmto (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmto (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmto (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmto +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt-old-delegate outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtoDelegate{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +innertwo +-- this is outerthree +outerfour's +multi-line wrapper payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmtoDelegate{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmtoDelegate (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmtoDelegate (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmtoDelegate (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmtoDelegate +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt-partial outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtp{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmtp{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmtp (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmtp (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmtp (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmtp +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +go-errorf outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour - innerone\ninnertwo", err:(*errors.errorString)(0xAAAABBBB)} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo +Wraps: (2) innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +Error types: (1) *fmt.wrapError (2) *errors.errorString +-- report composition: +*errors.errorString +*fmt.wrapError +== Extra "error types" +errors/*errors.errorString (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*errors.errorString)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.init.func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.errorString +-- report composition: +:: *errors.fundamental (top exception) +*errors.errorString +*fmt.wrapErrors +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +errors/*errors.errorString (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +go-errorf-suffix outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s).*outerthree.*outerfour +---- +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"innerone\ninnertwo - outerthree\nouterfour", err:(*errors.errorString)(0xAAAABBBB)} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) innerone + | innertwo - outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) ‹innerone› +‹ | innertwo - outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +Error types: (1) *fmt.wrapError (2) *errors.errorString +-- report composition: +*errors.errorString +*fmt.wrapError +== Extra "error types" +errors/*errors.errorString (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +goerr outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour: innerone\ninnertwo", err:(*errors.errorString)(0xAAAABBBB)} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmt.wrapError (2) *errors.errorString +-- report composition: +*errors.errorString +*fmt.wrapError +== Extra "error types" +errors/*errors.errorString (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +handled-domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +hint outerthree outerfour + +require (?s) +---- +&hintdetail.withHint{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *hintdetail.withHint (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *hintdetail.withHint (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *hintdetail.withHint (2) *errors.errorString +-- report composition: +*errors.errorString +*hintdetail.withHint +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +issuelink outerthree outerfour + +require (?s) +---- +&issuelink.withIssueLink{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *issuelink.withIssueLink (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *issuelink.withIssueLink (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × +× +Error types: (1) *issuelink.withIssueLink (2) *errors.errorString +-- report composition: +*errors.errorString +*issuelink.withIssueLink: https://mysite +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.errorString +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errors.errorString +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +migrated outerthree outerfour + +require (?s) +---- +&fmttests.werrMigrated{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrMigrated{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrMigrated (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrMigrated (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +Error types: (1) *fmttests.werrMigrated (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrMigrated +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +msg outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *errutil.withPrefix (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errutil.withPrefix (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × +× +Error types: (1) *errutil.withPrefix (2) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withPrefix: outerthree +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "outerthree: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +newfw outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +newfw-suffix outerthree outerfour + +require (?s).*outerthree.*outerfour +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withNewMessage: :: × +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: :: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +nofmt outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrNoFmt{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrNoFmt{cause:(*errors.errorString)(0xAAAABBBB), msg:"outerthree\nouterfour"} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrNoFmt{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrNoFmt (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrNoFmt (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrNoFmt (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrNoFmt +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-link outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo +Error types: (1) *os.LinkError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *os.LinkError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +link × ×: × +(1) link × × +Wraps: (2) × +× +Error types: (1) *os.LinkError (2) *errors.errorString +-- report composition: +*errors.errorString +*os.LinkError +== Extra "error types" +errors/*errors.errorString (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "link × ×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-netop outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&net.OpError{Op:"send", Net:"tcp", Source:net.Addr(nil), Addr:(*net.UnixAddr)(0xAAAABBBB), Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +send tcp unixhello: innerone +(1) send tcp unixhello +Wraps: (2) innerone + | innertwo +Error types: (1) *net.OpError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +send tcp ‹unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +send tcp ‹unixhello›: ‹innerone› +(1) send tcp ‹unixhello› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *net.OpError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +send tcp ×: × +(1) send tcp × +Wraps: (2) × +× +Error types: (1) *net.OpError (2) *errors.errorString +-- report composition: +*errors.errorString +*net.OpError +== Extra "error types" +errors/*errors.errorString (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "send tcp ×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-path outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo +Error types: (1) *fs.PathError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fs.PathError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +link ×: × +(1) link × +Wraps: (2) × +× +Error types: (1) *fs.PathError (2) *errors.errorString +-- report composition: +*errors.errorString +*fs.PathError +== Extra "error types" +errors/*errors.errorString (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "link ×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-syscall outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.SyscallError{ + Syscall: "open", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo +Error types: (1) *os.SyscallError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *os.SyscallError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +open: × +(1) open +Wraps: (2) × +× +Error types: (1) *os.SyscallError (2) *errors.errorString +-- report composition: +*errors.errorString +*os.SyscallError +== Extra "error types" +errors/*errors.errorString (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "open: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +pkgmsg outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.* +---- +&errors.withMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *errors.withMessage (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errors.withMessage (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *errors.withMessage (2) *errors.errorString +-- report composition: +*errors.errorString +*errors.withMessage +== Extra "error types" +errors/*errors.errorString (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +pkgstack outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s) +---- +&errors.withStack{ + error: &errors.errorString{s:"innerone\ninnertwo"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +innerone +innertwo +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +github.com/cockroachdb/errors/fmttests.init.func30 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withStack{ + error: &errors.errorString{s:"innerone\ninnertwo"}, + stack: &stack{...}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo +Error types: (1) *errors.withStack (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errors.withStack (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +Error types: (1) *errors.withStack (2) *errors.errorString +-- report composition: +*errors.errorString +:: *errors.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: ×\nvia *errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +safedetails outerthree outerfour + +require (?s) +---- +&safedetails.withSafeDetails{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo +Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) safe × + | × +Wraps: (2) × +× +Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString +-- report composition: +*errors.errorString +*safedetails.withSafeDetails: safe × +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +safefmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrSafeFormat{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrSafeFormat{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrSafeFormat (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +safe ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +safe ‹outerthree›: ‹innerone› +(1) safe ‹outerthree› + | ‹outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrSafeFormat (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +safe ×: × +(1) safe × + | × +Wraps: (2) × +× +Error types: (1) *fmttests.werrSafeFormat (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrSafeFormat +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "safe ×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +secondary outerthree outerfour + +require (?s) +---- +&secondary.withSecondaryError{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) innerone + | innertwo +Error types: (1) *secondary.withSecondaryError (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *secondary.withSecondaryError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) × +× +Error types: (1) *secondary.withSecondaryError (2) *errors.errorString +-- report composition: +*errors.errorString +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +stack outerthree outerfour + +require (?s) +---- +&withstack.withStack{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + stack: &stack{...}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +Error types: (1) *withstack.withStack (2) *errors.errorString +-- report composition: +*errors.errorString +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +tags outerthree outerfour + +require (?s) +---- +&contexttags.withContext{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo +Error types: (1) *contexttags.withContext (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=456] +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *contexttags.withContext (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) tags: [k×,safe=456] +Wraps: (2) × +× +Error types: (1) *contexttags.withContext (2) *errors.errorString +-- report composition: +*errors.errorString +*contexttags.withContext: k× +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +telemetry outerthree outerfour + +require (?s) +---- +&telemetrykeys.withTelemetry{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × +× +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.errorString +-- report composition: +*errors.errorString +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +wrapf outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × +× +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: new-stylew ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +wrapf-attached outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: new-style ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-goerr-via-network b/fmttests/testdata/format/wrap-goerr-via-network new file mode 100644 index 0000000..eb2183d --- /dev/null +++ b/fmttests/testdata/format/wrap-goerr-via-network @@ -0,0 +1,6465 @@ +run +goerr innerone innertwo +assertion outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +assertwrap outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +barrier outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +delegate outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrDelegate +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +delegate-empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrDelegateEmpty +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +delegate-noprefix outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrDelegateNoPrefix +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +detail outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withDetail{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *hintdetail.withDetail (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *hintdetail.withDetail (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *hintdetail.withDetail (2) *errors.errorString +-- report composition: +*errors.errorString +*hintdetail.withDetail +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo +Error types: (1) *domains.withDomain (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *domains.withDomain (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) mydomain +Wraps: (2) × +× +Error types: (1) *domains.withDomain (2) *errors.errorString +-- report composition: +*errors.errorString +*domains.withDomain: mydomain +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrWithElidedCause +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrEmpty +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmt +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt-old outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmto +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt-old-delegate outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmtoDelegate +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +fmt-partial outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrFmtp +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +go-errorf outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmt.wrapError +== Extra "error types" +errors/*errors.errorString (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × +× +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errors.errorString +-- report composition: +:: *errors.fundamental (top exception) +*errors.errorString +*fmt.wrapErrors +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +errors/*errors.errorString (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +go-errorf-suffix outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo - outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo - outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmt.wrapError +== Extra "error types" +errors/*errors.errorString (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +goerr outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmt.wrapError +== Extra "error types" +errors/*errors.errorString (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +handled-domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.errorString{s:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +hint outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withHint{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *hintdetail.withHint (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *hintdetail.withHint (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *hintdetail.withHint (2) *errors.errorString +-- report composition: +*errors.errorString +*hintdetail.withHint +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +issuelink outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&issuelink.withIssueLink{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *issuelink.withIssueLink (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *issuelink.withIssueLink (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × +× +Error types: (1) *issuelink.withIssueLink (2) *errors.errorString +-- report composition: +*errors.errorString +*issuelink.withIssueLink: https://mysite +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errors.errorString +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errors.errorString +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +migrated outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrMigrated +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +msg outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *errutil.withPrefix (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errutil.withPrefix (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × +× +Error types: (1) *errutil.withPrefix (2) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withPrefix: outerthree +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "outerthree: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.errorString{s:"innerone\ninnertwo"}, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errors.errorString +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errors.errorString +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +newfw outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × +× +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +newfw-suffix outerthree outerfour +opaque + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errors.errorString{s:"innerone\ninnertwo"}, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *errors.errorString +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *errors.errorString +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | Error types: (1) *errors.errorString +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × +× +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withNewMessage: :: × +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: :: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +nofmt outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrNoFmt +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-link outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo +Error types: (1) *os.LinkError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *os.LinkError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +link × ×: × +(1) link × × +Wraps: (2) × +× +Error types: (1) *os.LinkError (2) *errors.errorString +-- report composition: +*errors.errorString +*os.LinkError +== Extra "error types" +errors/*errors.errorString (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "link × ×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-netop outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +send tcp unixhello: innerone +(1) send tcp unixhello + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹send tcp unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹send tcp unixhello›: ‹innerone› +(1) ‹send tcp unixhello› + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*net.OpError +== Extra "error types" +errors/*errors.errorString (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-path outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo +Error types: (1) *fs.PathError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fs.PathError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +link ×: × +(1) link × +Wraps: (2) × +× +Error types: (1) *fs.PathError (2) *errors.errorString +-- report composition: +*errors.errorString +*fs.PathError +== Extra "error types" +errors/*errors.errorString (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "link ×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +os-syscall outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.SyscallError{ + Syscall: "open", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:(*errors.errorString)(0xAAAABBBB)} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errors.errorString{s:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo +Error types: (1) *os.SyscallError (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *os.SyscallError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +open: × +(1) open +Wraps: (2) × +× +Error types: (1) *os.SyscallError (2) *errors.errorString +-- report composition: +*errors.errorString +*os.SyscallError +== Extra "error types" +errors/*errors.errorString (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "open: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +pkgmsg outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errors.withMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *errors.withMessage (2) *errors.errorString +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errors.withMessage (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *errors.withMessage (2) *errors.errorString +-- report composition: +*errors.errorString +*errors.withMessage +== Extra "error types" +errors/*errors.errorString (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +pkgstack outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +:: *errors.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: ×\nvia *errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +safedetails outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&safedetails.withSafeDetails{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo +Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) safe × + | × +Wraps: (2) × +× +Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString +-- report composition: +*errors.errorString +*safedetails.withSafeDetails: safe × +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +safefmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹safe outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹safe outerthree›: ‹innerone› +(1) ‹safe outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +*fmttests.werrSafeFormat +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×: ×" +(NO STACKTRACE) + +run +goerr innerone innertwo +secondary outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&secondary.withSecondaryError{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) innerone + | innertwo +Error types: (1) *secondary.withSecondaryError (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *secondary.withSecondaryError (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) × +× +Error types: (1) *secondary.withSecondaryError (2) *errors.errorString +-- report composition: +*errors.errorString +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +stack outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errors.errorString +-- report composition: +*errors.errorString +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +tags outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&contexttags.withContext{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo +Error types: (1) *contexttags.withContext (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=‹456›] +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *contexttags.withContext (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) tags: [k×,safe=×] +Wraps: (2) × +× +Error types: (1) *contexttags.withContext (2) *errors.errorString +-- report composition: +*errors.errorString +*contexttags.withContext: k× +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +telemetry outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&telemetrykeys.withTelemetry{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +× +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × +× +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.errorString +-- report composition: +*errors.errorString +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: "*errors.errorString" +Title: "×" +(NO STACKTRACE) + +run +goerr innerone innertwo +wrapf outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × +× +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: new-stylew ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +goerr innerone innertwo +wrapf-attached outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errors.errorString{s:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.errorString +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.errorString +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × +× +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.errorString +-- report composition: +*errors.errorString +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +errors/*errors.errorString (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.errorString: new-style ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-newf b/fmttests/testdata/format/wrap-newf new file mode 100644 index 0000000..950b8d4 --- /dev/null +++ b/fmttests/testdata/format/wrap-newf @@ -0,0 +1,10053 @@ +run +newf innerone innertwo +assertion outerthree outerfour + +require (?s) +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +assertwrap outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +== Error() +assertmsg: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: new-style innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: new-style ‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: new-style × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +barrier outerthree outerfour + +require (?s) +---- +&barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "new-style ×" +(NO STACKTRACE) + +run +newf innerone innertwo +delegate outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrDelegate{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegate{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | -- multi-line + | wrapper payload +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrDelegate (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- multi-line› +‹ | wrapper payload› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrDelegate (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +× +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrDelegate (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrDelegate +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +delegate-empty outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateEmpty{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateEmpty{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrDelegateEmpty (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrDelegateEmpty (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrDelegateEmpty (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +delegate-noprefix outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateNoPrefix{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateNoPrefix{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) detail +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) ‹detail› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +detail outerthree outerfour + +require (?s) +---- +&hintdetail.withDetail{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + detail: "outerthree\nouterfour", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *hintdetail.withDetail (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *hintdetail.withDetail (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *hintdetail.withDetail (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*hintdetail.withDetail +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + domain: "mydomain", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) mydomain +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *domains.withDomain (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) mydomain +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *domains.withDomain (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) mydomain +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *domains.withDomain (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*domains.withDomain: mydomain +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrWithElidedCause (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrWithElidedCause (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrWithElidedCause (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +empty outerthree outerfour + +require (?s) +---- +&fmttests.werrEmpty{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrEmpty{ + wrapped: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrEmpty (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrEmpty (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrEmpty (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrEmpty +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmt{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | -- this is outerthree + | outerfour's + | multi-line wrapper payload +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrFmt (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- this is outerthree› +‹ | outerfour's› +‹ | multi-line wrapper payload› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrFmt (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +× +× +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrFmt (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt-old outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmto{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: new-style innerone\ninnertwo" +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.leafError +-- this is outerthree +outerfour's +multi-line payload (fmt) +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmto{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrFmto (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrFmto (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrFmto (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmto +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt-old-delegate outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtoDelegate{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: new-style innerone\ninnertwo" +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.leafError +-- this is outerthree +outerfour's +multi-line wrapper payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmtoDelegate{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrFmtoDelegate (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrFmtoDelegate (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrFmtoDelegate (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt-partial outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtp{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmtp{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrFmtp (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrFmtp (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrFmtp (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmtp +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +go-errorf outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo", + err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour - new-style innerone\ninnertwo", err:(*withstack.withStack)(0xAAAABBBB)} +== Error() +outerthree +outerfour - new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo", + err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - new-style innerone + | innertwo +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - new-style innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - new-style innerone› +‹ | innertwo› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", errs:[]error{(*withstack.withStack)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - new-style innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - new-style innerone + | innertwo sibling error in wrapper +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style innerone + | innertwo +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - new-style innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - new-style innerone› +‹ | innertwo sibling error in wrapper› +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.init.func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style × + | × +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *withstack.withStack (4) *errutil.leafError +-- report composition: +:: *errors.fundamental (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) +*fmt.wrapErrors +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +go-errorf-suffix outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s).*outerthree.*outerfour +---- +&fmt.wrapError{ + msg: "new-style innerone\ninnertwo - outerthree\nouterfour", + err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"new-style innerone\ninnertwo - outerthree\nouterfour", err:(*withstack.withStack)(0xAAAABBBB)} +== Error() +new-style innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "new-style innerone\ninnertwo - outerthree\nouterfour", + err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +new-style innerone +(1) new-style innerone + | innertwo - outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹new-style innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹new-style innerone› +(1) ‹new-style innerone› +‹ | innertwo - outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +goerr outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour: new-style innerone\ninnertwo", + err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour: new-style innerone\ninnertwo", err:(*withstack.withStack)(0xAAAABBBB)} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour: new-style innerone\ninnertwo", + err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmt.wrapError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +handled-domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + domain: "error domain: pkg ", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) error domain: pkg +Wraps: (2) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) error domain: pkg +Wraps: (2) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) error domain: pkg +Wraps: (2) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "new-style ×" +(NO STACKTRACE) + +run +newf innerone innertwo +hint outerthree outerfour + +require (?s) +---- +&hintdetail.withHint{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + hint: "outerthree\nouterfour", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *hintdetail.withHint (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *hintdetail.withHint (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *hintdetail.withHint (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*hintdetail.withHint +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +issuelink outerthree outerfour + +require (?s) +---- +&issuelink.withIssueLink{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *issuelink.withIssueLink (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *issuelink.withIssueLink (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *issuelink.withIssueLink (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +new-style innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style innerone + | innertwo +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) new-style ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) new-style × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style × + | × +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *withstack.withStack (5) *errutil.leafError +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) +*join.joinError +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +migrated outerthree outerfour + +require (?s) +---- +&fmttests.werrMigrated{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrMigrated{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrMigrated (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrMigrated (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrMigrated (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrMigrated +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +msg outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&errutil.withPrefix{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errutil.withPrefix (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: new-style ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errutil.withPrefix (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: outerthree: new-style × +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errutil.withPrefix (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *withstack.withStack (11) *errutil.leafError +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +newfw outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: new-style ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: new-style ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style (outerthree +outerfour) :: new-style innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | new-style innerone + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style (outerthree + | outerfour) :: new-style innerone + | innertwo :: +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *withstack.withStack (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: new-style ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | new-style ‹innerone› + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: new-style ‹innerone› + | ‹innertwo› :: +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *withstack.withStack (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | new-style × + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style (× + | ×) :: new-style × + | × :: +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style × + | × +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *withstack.withStack (5) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +newfw-suffix outerthree outerfour + +require (?s).*outerthree.*outerfour +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + message: ":: new-style ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + message: ":: new-style ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +:: new-style innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | new-style innerone + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) :: new-style innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *withstack.withStack (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: new-style ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: new-style ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | new-style ‹innerone› + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) :: new-style ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *withstack.withStack (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: :: new-style × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | new-style × + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) :: new-style × + | × :: new-style (× + | ×) +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style × + | × +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *withstack.withStack (5) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withNewMessage: :: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: :: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +nofmt outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrNoFmt{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrNoFmt{cause:(*withstack.withStack)(0xAAAABBBB), msg:"outerthree\nouterfour"} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrNoFmt{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrNoFmt (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrNoFmt (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrNoFmt (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-link outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:&withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, +}} +== Error() +link /path/to/file /path/to/newfile: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: new-style innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *os.LinkError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: new-style ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *os.LinkError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: link × ×: new-style × +(1) link × × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *os.LinkError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*os.LinkError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: link × ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-netop outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&net.OpError{Op:"send", Net:"tcp", Source:net.Addr(nil), Addr:(*net.UnixAddr)(0xAAAABBBB), Err:&withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, +}} +== Error() +send tcp unixhello: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +send tcp unixhello: new-style innerone +(1) send tcp unixhello +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *net.OpError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +send tcp ‹unixhello›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +send tcp ‹unixhello›: new-style ‹innerone› +(1) send tcp ‹unixhello› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *net.OpError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: send tcp ×: new-style × +(1) send tcp × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *net.OpError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*net.OpError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: send tcp ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-path outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:&withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, +}} +== Error() +link /path/to/file: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: new-style innerone +(1) link /path/to/file +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fs.PathError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: new-style ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fs.PathError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: link ×: new-style × +(1) link × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fs.PathError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fs.PathError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: link ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-syscall outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.SyscallError{ + Syscall: "open", + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:&withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, +}} +== Error() +open: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: new-style innerone +(1) open +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *os.SyscallError (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: new-style ‹innerone› +(1) open +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *os.SyscallError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: open: new-style × +(1) open +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *os.SyscallError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*os.SyscallError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: open: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +pkgmsg outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.* +---- +&errors.withMessage{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: new-style innerone +innertwo +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: new-style innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.leafError +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errors.withMessage (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errors.withMessage (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errors.withMessage (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errors.withMessage +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +pkgstack outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s) +---- +&errors.withStack{ + error: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +new-style innerone +innertwo +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.leafError +github.com/cockroachdb/errors/fmttests.init.func30 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withStack{ + error: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + stack: &stack{...}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +new-style innerone +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | [...repeated from below...] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errors.withStack (2) *withstack.withStack (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +new-style ‹innerone› +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | [...repeated from below...] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errors.withStack (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | [...repeated from below...] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errors.withStack (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +:: *errors.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +safedetails outerthree outerfour + +require (?s) +---- +&safedetails.withSafeDetails{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + safeDetails: {"safe ×\n×"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) safe × + | × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *safedetails.withSafeDetails (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) safe × + | × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *safedetails.withSafeDetails (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) safe × + | × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *safedetails.withSafeDetails (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +safefmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrSafeFormat{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrSafeFormat{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +safe outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: new-style innerone +(1) safe outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrSafeFormat (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +safe ‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +safe ‹outerthree›: new-style ‹innerone› +(1) safe ‹outerthree› + | ‹outerfour› +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrSafeFormat (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: safe ×: new-style × +(1) safe × + | × +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrSafeFormat (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: safe ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +secondary outerthree outerfour + +require (?s) +---- +&secondary.withSecondaryError{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *secondary.withSecondaryError (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *secondary.withSecondaryError (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *secondary.withSecondaryError (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +stack outerthree outerfour + +require (?s) +---- +&withstack.withStack{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + stack: &stack{...}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | [...repeated from below...] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | [...repeated from below...] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *withstack.withStack (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | [...repeated from below...] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *withstack.withStack (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +tags outerthree outerfour + +require (?s) +---- +&contexttags.withContext{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) tags: [k123,safe=456] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *contexttags.withContext (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) tags: [k‹123›,safe=456] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *contexttags.withContext (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) tags: [k×,safe=456] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *contexttags.withContext (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*contexttags.withContext: k× +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +telemetry outerthree outerfour + +require (?s) +---- +&telemetrykeys.withTelemetry{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *telemetrykeys.withTelemetry (2) *withstack.withStack (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *telemetrykeys.withTelemetry (2) *withstack.withStack (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *telemetrykeys.withTelemetry (2) *withstack.withStack (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +wrapf outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +== Error() +new-stylew outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | [...repeated from below...] +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (4) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *withstack.withStack (4) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: new-style ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | [...repeated from below...] +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (4) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *withstack.withStack (4) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: new-style × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | [...repeated from below...] +Wraps: (2) new-stylew × + | × +Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (4) new-style × + | × +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *withstack.withStack (4) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-stylew ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +wrapf-attached outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &withstack.withStack{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + stack: &stack{...}, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style outerthree +outerfour (payload): new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: new-style innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *withstack.withStack (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: new-style ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *withstack.withStack (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: new-style × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style × + | × +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *withstack.withStack (5) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-newf-via-network b/fmttests/testdata/format/wrap-newf-via-network new file mode 100644 index 0000000..af4628b --- /dev/null +++ b/fmttests/testdata/format/wrap-newf-via-network @@ -0,0 +1,12364 @@ +run +newf innerone innertwo +assertion outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +assertwrap outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +assertmsg: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: new-style innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: new-style ‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: new-style × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +barrier outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "new-style ×" +(NO STACKTRACE) + +run +newf innerone innertwo +delegate outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrDelegate +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +delegate-empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +delegate-noprefix outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +detail outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withDetail{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + detail: "outerthree\nouterfour", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) × +× +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*hintdetail.withDetail +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + domain: "mydomain", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) mydomain +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *domains.withDomain (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) mydomain +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *domains.withDomain (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) mydomain +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *domains.withDomain (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*domains.withDomain: mydomain +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrEmpty +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt-old outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmto +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt-old-delegate outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +fmt-partial outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrFmtp +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +go-errorf outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour - new-style innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour - new-style innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +outerthree +outerfour - new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - new-style innerone + | innertwo + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - new-style innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - new-style innerone› + | ‹innertwo› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - new-style innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - new-style innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - new-style innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - new-style innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - new-style innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (4) new-style × + | × +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueWrapper (4) *errutil.leafError +-- report composition: +:: *errors.fundamental (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) +*fmt.wrapErrors +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +go-errorf-suffix outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "new-style innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "new-style innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +new-style innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo - outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹new-style innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹new-style innerone› +(1) ‹new-style innerone› + | ‹innertwo - outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +goerr outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +handled-domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "new-style ‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + domain: "error domain: pkg ", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) error domain: pkg +Wraps: (2) new-style innerone + | innertwo + | -- cause hidden behind barrier + | new-style innerone + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) error domain: pkg +Wraps: (2) new-style ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | new-style ‹innerone› + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) error domain: pkg +Wraps: (2) new-style × + | × + | -- cause hidden behind barrier + | new-style × + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "new-style ×" +(NO STACKTRACE) + +run +newf innerone innertwo +hint outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withHint{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + hint: "outerthree\nouterfour", +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) × +× +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*hintdetail.withHint +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +issuelink outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&issuelink.withIssueLink{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +new-style innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) new-style innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style innerone + | innertwo +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) new-style ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +new-style × +(1) new-style × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (5) new-style × + | × +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueWrapper (5) *errutil.leafError +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*errutil.leafError: new-style × +:: *withstack.withStack (1) +*join.joinError +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +migrated outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrMigrated +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +msg outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errutil.withPrefix{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: new-style ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: outerthree: new-style × +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: new-style innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: new-style ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: new-style × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (11) new-style × + | × +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueWrapper (11) *errutil.leafError +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*errutil.leafError: new-style × +:: *withstack.withStack (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +newfw outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: new-style ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: new-style ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style (outerthree +outerfour) :: new-style innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | new-style innerone + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style (outerthree + | outerfour) :: new-style innerone + | innertwo :: +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueWrapper (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: new-style ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | new-style ‹innerone› + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: new-style ‹innerone› + | ‹innertwo› :: +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueWrapper (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | new-style × + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style (× + | ×) :: new-style × + | × :: +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueWrapper (5) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +newfw-suffix outerthree outerfour +opaque + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + message: ":: new-style ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + message: ":: new-style ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +:: new-style innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | new-style innerone + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style innerone + | | innertwo + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) :: new-style innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueWrapper (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: new-style ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | new-style ‹innerone› + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style ‹innerone› + | | ‹innertwo› + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) :: new-style ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueWrapper (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: :: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | new-style × + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func16 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) new-style × + | | × + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) :: new-style × + | × :: new-style (× + | ×) +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueWrapper (5) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withNewMessage: :: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: :: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +nofmt outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: new-style innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-link outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:&errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +}} +== Error() +link /path/to/file /path/to/newfile: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: new-style innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *os.LinkError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: new-style ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *os.LinkError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: link × ×: new-style × +(1) link × × +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *os.LinkError (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*os.LinkError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: link × ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-netop outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +send tcp unixhello: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +send tcp unixhello: new-style innerone +(1) send tcp unixhello + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹send tcp unixhello›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹send tcp unixhello›: new-style ‹innerone› +(1) ‹send tcp unixhello› + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*net.OpError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-path outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:&errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +}} +== Error() +link /path/to/file: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: new-style innerone +(1) link /path/to/file +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *fs.PathError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: new-style ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *fs.PathError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: link ×: new-style × +(1) link × +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *fs.PathError (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fs.PathError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: link ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +os-syscall outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:&errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +}} +== Error() +open: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: new-style innerone +(1) open +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *os.SyscallError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: new-style ‹innerone› +(1) open +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *os.SyscallError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: open: new-style × +(1) open +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *os.SyscallError (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*os.SyscallError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: open: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +pkgmsg outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errors.withMessage{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: new-style innerone +innertwo +== Error() +outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: new-style innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: new-style innerone +(1) outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errors.withMessage (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: new-style ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errors.withMessage (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × +× +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errors.withMessage (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errors.withMessage +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +pkgstack outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +:: *errors.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +safedetails outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&safedetails.withSafeDetails{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + safeDetails: {"safe ×\n×"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) safe × + | × +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) safe × + | × +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) safe × + | × +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +safefmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +safe outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: new-style innerone +(1) safe outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹safe outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹safe outerthree›: new-style ‹innerone› +(1) ‹safe outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: ×: new-style × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*fmttests.werrSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +secondary outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&secondary.withSecondaryError{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +stack outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +tags outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&contexttags.withContext{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) tags: [k123,safe=456] +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *contexttags.withContext (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) tags: [k‹123›,safe=‹456›] +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *contexttags.withContext (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) tags: [k×,safe=×] +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *contexttags.withContext (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*contexttags.withContext: k× +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +telemetry outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style innerone + | innertwo +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueWrapper (3) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueWrapper (3) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style × +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) new-style × + | × +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueWrapper (3) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +wrapf outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-stylew outerthree +outerfour: new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (4) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueWrapper (4) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (4) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueWrapper (4) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (4) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueWrapper (4) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-stylew ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +newf innerone innertwo +wrapf-attached outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"new-style ‹innerone›\n‹innertwo›"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func16\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style outerthree +outerfour (payload): new-style innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: new-style innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style innerone + | innertwo +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueWrapper (5) *errutil.leafError +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): new-style ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: new-style ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style ‹innerone› + | ‹innertwo› +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueWrapper (5) *errutil.leafError +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: new-style × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func16 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (5) new-style × + | × +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueWrapper (5) *errutil.leafError +-- report composition: +*errutil.leafError: new-style × +:: *withstack.withStack (top exception) +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: new-style ×: new-style ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-nofmt b/fmttests/testdata/format/wrap-nofmt new file mode 100644 index 0000000..488be4a --- /dev/null +++ b/fmttests/testdata/format/wrap-nofmt @@ -0,0 +1,5579 @@ +run +nofmt innerone innertwo +assertion outerthree outerfour + +require (?s) +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +assertwrap outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +barrier outerthree outerfour + +require (?s) +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +delegate outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrDelegate{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegate{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- multi-line + | wrapper payload +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrDelegate (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- multi-line› +‹ | wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrDelegate (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrDelegate (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +delegate-empty outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateEmpty{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateEmpty{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrDelegateEmpty (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrDelegateEmpty (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +Error types: (1) *fmttests.werrDelegateEmpty (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +delegate-noprefix outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateNoPrefix{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateNoPrefix{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) detail +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹detail› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +Wraps: (2) × +× +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +detail outerthree outerfour + +require (?s) +---- +&hintdetail.withDetail{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *hintdetail.withDetail (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *hintdetail.withDetail (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *hintdetail.withDetail (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*hintdetail.withDetail +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo +Error types: (1) *domains.withDomain (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *domains.withDomain (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) mydomain +Wraps: (2) × +× +Error types: (1) *domains.withDomain (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*domains.withDomain: mydomain +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrWithElidedCause (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrWithElidedCause (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrWithElidedCause (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +empty outerthree outerfour + +require (?s) +---- +&fmttests.werrEmpty{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrEmpty{ + wrapped: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrEmpty (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrEmpty (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +Error types: (1) *fmttests.werrEmpty (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmt{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- this is outerthree + | outerfour's + | multi-line wrapper payload +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmt (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- this is outerthree› +‹ | outerfour's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmt (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +× +× +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmt (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt-old outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmto{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +innertwo +-- this is outerthree +outerfour's +multi-line payload (fmt) +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmto{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmto (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmto (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmto (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmto +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt-old-delegate outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtoDelegate{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +innertwo +-- this is outerthree +outerfour's +multi-line wrapper payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmtoDelegate{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmtoDelegate (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmtoDelegate (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmtoDelegate (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt-partial outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtp{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmtp{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrFmtp (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrFmtp (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrFmtp (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmtp +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +go-errorf outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour - innerone\ninnertwo", err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo +Wraps: (2) innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*fmttests.errNoFmt)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.init.func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *fmttests.errNoFmt +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.errNoFmt +*fmt.wrapErrors +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +go-errorf-suffix outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s).*outerthree.*outerfour +---- +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"innerone\ninnertwo - outerthree\nouterfour", err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) innerone + | innertwo - outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) ‹innerone› +‹ | innertwo - outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +goerr outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour: innerone\ninnertwo", err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmt.wrapError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +handled-domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | Error types: (1) *fmttests.errNoFmt +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +hint outerthree outerfour + +require (?s) +---- +&hintdetail.withHint{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *hintdetail.withHint (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *hintdetail.withHint (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × +× +Error types: (1) *hintdetail.withHint (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*hintdetail.withHint +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +issuelink outerthree outerfour + +require (?s) +---- +&issuelink.withIssueLink{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *issuelink.withIssueLink (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *issuelink.withIssueLink (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × +× +Error types: (1) *issuelink.withIssueLink (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *fmttests.errNoFmt +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errNoFmt +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +migrated outerthree outerfour + +require (?s) +---- +&fmttests.werrMigrated{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrMigrated{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrMigrated (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrMigrated (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) +Wraps: (2) × +× +Error types: (1) *fmttests.werrMigrated (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrMigrated +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +msg outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&errutil.withPrefix{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *errutil.withPrefix (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errutil.withPrefix (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × +× +Error types: (1) *errutil.withPrefix (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "outerthree: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *fmttests.errNoFmt +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +newfw outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *fmttests.errNoFmt +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *fmttests.errNoFmt +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | Error types: (1) *fmttests.errNoFmt +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +newfw-suffix outerthree outerfour + +require (?s).*outerthree.*outerfour +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + }, + stack: &stack{...}, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | Error types: (1) *fmttests.errNoFmt +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | Error types: (1) *fmttests.errNoFmt +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | Error types: (1) *fmttests.errNoFmt +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*errutil.withNewMessage: :: × +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: :: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +nofmt outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrNoFmt{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrNoFmt{cause:(*fmttests.errNoFmt)(0xAAAABBBB), msg:"outerthree\nouterfour"} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrNoFmt{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrNoFmt (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrNoFmt (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *fmttests.werrNoFmt (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-link outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo +Error types: (1) *os.LinkError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *os.LinkError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +link × ×: × +(1) link × × +Wraps: (2) × +× +Error types: (1) *os.LinkError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*os.LinkError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "link × ×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-netop outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&net.OpError{Op:"send", Net:"tcp", Source:net.Addr(nil), Addr:(*net.UnixAddr)(0xAAAABBBB), Err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +send tcp unixhello: innerone +(1) send tcp unixhello +Wraps: (2) innerone + | innertwo +Error types: (1) *net.OpError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +send tcp ‹unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +send tcp ‹unixhello›: ‹innerone› +(1) send tcp ‹unixhello› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *net.OpError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +send tcp ×: × +(1) send tcp × +Wraps: (2) × +× +Error types: (1) *net.OpError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*net.OpError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "send tcp ×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-path outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo +Error types: (1) *fs.PathError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fs.PathError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +link ×: × +(1) link × +Wraps: (2) × +× +Error types: (1) *fs.PathError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fs.PathError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "link ×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-syscall outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.SyscallError{ + Syscall: "open", + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:(*fmttests.errNoFmt)(0xAAAABBBB)} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo +Error types: (1) *os.SyscallError (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *os.SyscallError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +open: × +(1) open +Wraps: (2) × +× +Error types: (1) *os.SyscallError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*os.SyscallError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "open: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +pkgmsg outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.* +---- +&errors.withMessage{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *errors.withMessage (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errors.withMessage (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × +× +Error types: (1) *errors.withMessage (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*errors.withMessage +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +pkgstack outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s) +---- +&errors.withStack{ + error: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +innerone +innertwo +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +github.com/cockroachdb/errors/fmttests.init.func30 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withStack{ + error: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo +Error types: (1) *errors.withStack (2) *fmttests.errNoFmt +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *errors.withStack (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +Error types: (1) *errors.withStack (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +:: *errors.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: ×\nvia *errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +safedetails outerthree outerfour + +require (?s) +---- +&safedetails.withSafeDetails{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo +Error types: (1) *safedetails.withSafeDetails (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *safedetails.withSafeDetails (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) safe × + | × +Wraps: (2) × +× +Error types: (1) *safedetails.withSafeDetails (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +safefmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrSafeFormat{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrSafeFormat{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + msg: "outerthree\nouterfour", +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour +Wraps: (2) innerone + | innertwo +Error types: (1) *fmttests.werrSafeFormat (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +safe ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +safe ‹outerthree›: ‹innerone› +(1) safe ‹outerthree› + | ‹outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *fmttests.werrSafeFormat (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +safe ×: × +(1) safe × + | × +Wraps: (2) × +× +Error types: (1) *fmttests.werrSafeFormat (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*fmttests.werrSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "safe ×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +secondary outerthree outerfour + +require (?s) +---- +&secondary.withSecondaryError{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) innerone + | innertwo +Error types: (1) *secondary.withSecondaryError (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *secondary.withSecondaryError (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) × +× +Error types: (1) *secondary.withSecondaryError (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +stack outerthree outerfour + +require (?s) +---- +&withstack.withStack{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + stack: &stack{...}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × +× +Error types: (1) *withstack.withStack (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +tags outerthree outerfour + +require (?s) +---- +&contexttags.withContext{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo +Error types: (1) *contexttags.withContext (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=456] +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *contexttags.withContext (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) tags: [k×,safe=456] +Wraps: (2) × +× +Error types: (1) *contexttags.withContext (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*contexttags.withContext: k× +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +telemetry outerthree outerfour + +require (?s) +---- +&telemetrykeys.withTelemetry{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo +Error types: (1) *telemetrykeys.withTelemetry (2) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› +‹ | innertwo› +Error types: (1) *telemetrykeys.withTelemetry (2) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +× +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × +× +Error types: (1) *telemetrykeys.withTelemetry (2) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +wrapf outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × +× +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: new-stylew ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +wrapf-attached outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &fmttests.errNoFmt{msg:"innerone\ninnertwo"}, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *fmttests.errNoFmt +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› +‹ | innertwo› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *fmttests.errNoFmt +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *fmttests.errNoFmt +-- report composition: +*fmttests.errNoFmt +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: new-style ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-nofmt-via-network b/fmttests/testdata/format/wrap-nofmt-via-network new file mode 100644 index 0000000..86cc14b --- /dev/null +++ b/fmttests/testdata/format/wrap-nofmt-via-network @@ -0,0 +1,7619 @@ +run +nofmt innerone innertwo +assertion outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +assertwrap outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +barrier outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +delegate outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +delegate-empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +delegate-noprefix outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +detail outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withDetail{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*hintdetail.withDetail +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) mydomain +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*domains.withDomain: mydomain +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrEmpty +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt-old outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmto +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt-old-delegate outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +fmt-partial outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrFmtp +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +go-errorf outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.errNoFmt +*fmt.wrapErrors +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +go-errorf-suffix outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo - outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo - outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +goerr outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmt.wrapError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +handled-domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: masked error: × +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +hint outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withHint{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*hintdetail.withHint +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +issuelink outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&issuelink.withIssueLink{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +*fmttests.errNoFmt +*join.joinError +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +migrated outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrMigrated +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +msg outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "outerthree: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +*fmttests.errNoFmt +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +newfw outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: new-style (×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +newfw-suffix outerthree outerfour +opaque + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*errutil.withNewMessage: :: × +*secondary.withSecondaryError +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: :: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +nofmt outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrNoFmt +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-link outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +link × ×: × +(1) link × × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*os.LinkError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "link × ×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-netop outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +send tcp unixhello: innerone +(1) send tcp unixhello + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹send tcp unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹send tcp unixhello›: ‹innerone› +(1) ‹send tcp unixhello› + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*net.OpError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-path outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +link ×: × +(1) link × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fs.PathError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "link ×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +os-syscall outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +open: × +(1) open +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*os.SyscallError +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "open: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +pkgmsg outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errors.withMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +(1) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueLeaf +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*errors.withMessage +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +pkgstack outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +:: *errors.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: ×\nvia *errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +safedetails outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&safedetails.withSafeDetails{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) safe × + | × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +safefmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹safe outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹safe outerthree›: ‹innerone› +(1) ‹safe outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*fmttests.werrSafeFormat +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×: ×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +secondary outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&secondary.withSecondaryError{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +stack outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +tags outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&contexttags.withContext{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=‹456›] +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) tags: [k×,safe=×] +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*contexttags.withContext: k× +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +telemetry outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: "*fmttests.errNoFmt" +Title: "×" +(NO STACKTRACE) + +run +nofmt innerone innertwo +wrapf outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: new-stylew ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +nofmt innerone innertwo +wrapf-attached outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +-- report composition: +*fmttests.errNoFmt +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (top exception) +== Extra "error types" +github.com/cockroachdb/errors/fmttests/*fmttests.errNoFmt (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*fmttests.errNoFmt: new-style ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-pkgerr b/fmttests/testdata/format/wrap-pkgerr new file mode 100644 index 0000000..a177243 --- /dev/null +++ b/fmttests/testdata/format/wrap-pkgerr @@ -0,0 +1,9699 @@ +run +pkgerr innerone innertwo +assertion outerthree outerfour + +require (?s) +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +assertwrap outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +barrier outerthree outerfour + +require (?s) +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +pkgerr innerone innertwo +delegate outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrDelegate{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegate{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- multi-line + | wrapper payload +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrDelegate (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- multi-line› +‹ | wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrDelegate (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrDelegate (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrDelegate +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +delegate-empty outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateEmpty{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateEmpty{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrDelegateEmpty (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +delegate-noprefix outerthree outerfour + +require (?s) +---- +&fmttests.werrDelegateNoPrefix{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrDelegateNoPrefix{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) detail +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹detail› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrDelegateNoPrefix (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +detail outerthree outerfour + +require (?s) +---- +&hintdetail.withDetail{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withDetail (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *hintdetail.withDetail (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *hintdetail.withDetail (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*hintdetail.withDetail +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *domains.withDomain (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *domains.withDomain (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) mydomain +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *domains.withDomain (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*domains.withDomain: mydomain +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrWithElidedCause (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +empty outerthree outerfour + +require (?s) +---- +&fmttests.werrEmpty{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrEmpty{ + wrapped: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrEmpty (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrEmpty (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrEmpty (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrEmpty +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmt{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmt{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | -- this is outerthree + | outerfour's + | multi-line wrapper payload +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrFmt (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +‹ | -- this is outerthree› +‹ | outerfour's› +‹ | multi-line wrapper payload› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrFmt (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +× +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrFmt (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmt +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt-old outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmto{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +innertwo +github.com/cockroachdb/errors/fmttests.init.func9 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +-- this is outerthree +outerfour's +multi-line payload (fmt) +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmto{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrFmto (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrFmto (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrFmto (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmto +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt-old-delegate outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtoDelegate{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +"outerthree\nouterfour: innerone\ninnertwo" +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +innertwo +github.com/cockroachdb/errors/fmttests.init.func9 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +-- this is outerthree +outerfour's +multi-line wrapper payload +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrFmtoDelegate{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrFmtoDelegate (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrFmtoDelegate (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrFmtoDelegate (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt-partial outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrFmtp{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrFmtp{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrFmtp (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrFmtp (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrFmtp (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmtp +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +go-errorf outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour - innerone\ninnertwo", err:(*errors.fundamental)(0xAAAABBBB)} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour - innerone\ninnertwo", + err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmt.wrapError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmt.wrapError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmt.wrapError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmt.wrapError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +go-errorf-multi outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapErrors{msg:"outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", errs:[]error{(*errors.fundamental)(0xAAAABBBB), (*errors.fundamental)(0xAAAABBBB)}} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapErrors{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &errors.fundamental{ + msg: "sibling error in wrapper", + stack: &stack{...}, + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper +Wraps: (2) sibling error in wrapper + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree› +(1) ‹outerthree› +‹ | outerfour - innerone› +‹ | innertwo sibling error in wrapper› +Wraps: (2) ‹sibling error in wrapper› +‹ | github.com/cockroachdb/errors/fmttests.init.func23› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Wraps: (3) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +× +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Wraps: (3) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmt.wrapErrors (2) *errors.fundamental (3) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +:: *errors.fundamental (1) +*fmt.wrapErrors +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +go-errorf-suffix outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s).*outerthree.*outerfour +---- +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"innerone\ninnertwo - outerthree\nouterfour", err:(*errors.fundamental)(0xAAAABBBB)} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "innerone\ninnertwo - outerthree\nouterfour", + err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) innerone + | innertwo - outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmt.wrapError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) ‹innerone› +‹ | innertwo - outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmt.wrapError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmt.wrapError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmt.wrapError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +goerr outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmt.wrapError{msg:"outerthree\nouterfour: innerone\ninnertwo", err:(*errors.fundamental)(0xAAAABBBB)} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmt.wrapError{ + msg: "outerthree\nouterfour: innerone\ninnertwo", + err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmt.wrapError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmt.wrapError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmt.wrapError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmt.wrapError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +handled-domain outerthree outerfour + +require (?s) +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | × + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +pkgerr innerone innertwo +hint outerthree outerfour + +require (?s) +---- +&hintdetail.withHint{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withHint (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *hintdetail.withHint (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *hintdetail.withHint (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*hintdetail.withHint +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +issuelink outerthree outerfour + +require (?s) +---- +&issuelink.withIssueLink{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *issuelink.withIssueLink (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *issuelink.withIssueLink (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *issuelink.withIssueLink (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +join outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&join.joinError{ + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | [...repeated from below...] +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *join.joinError (2) *withstack.withStack (3) *errutil.leafError (4) *errors.fundamental +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +:: *errors.fundamental (1) +*join.joinError +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +migrated outerthree outerfour + +require (?s) +---- +&fmttests.werrMigrated{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrMigrated{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrMigrated (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrMigrated (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrMigrated (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrMigrated +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +msg outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&errutil.withPrefix{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errutil.withPrefix (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *errutil.withPrefix (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *errutil.withPrefix (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: outerthree: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +multi-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"included 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +multi-elided-cause outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 1"}, + stack: &stack{...}, + }, + &withstack.withStack{ + cause: &errutil.leafError{msg:"elided 2"}, + stack: &stack{...}, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | [...repeated from below...] + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *withstack.withStack (4) *errutil.leafError (5) *withstack.withStack (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *withstack.withStack (9) *errutil.leafError (10) *errors.fundamental +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +newfw outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError: details for github.com/pkg/errors/*errors.fundamental::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: new-style (×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +newfw-suffix outerthree outerfour + +require (?s).*outerthree.*outerfour +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | ‹ | innertwo› + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | × + | (1) × + | × + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errors.fundamental +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withNewMessage: :: × +*secondary.withSecondaryError: details for github.com/pkg/errors/*errors.fundamental::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: :: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +nofmt outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrNoFmt{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrNoFmt{cause:(*errors.fundamental)(0xAAAABBBB), msg:"outerthree\nouterfour"} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fmttests.werrNoFmt{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrNoFmt (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrNoFmt (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrNoFmt (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrNoFmt +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-link outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:innerone +innertwo} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.LinkError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *os.LinkError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: link × ×: × +(1) link × × +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *os.LinkError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*os.LinkError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: link × ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-netop outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&net.OpError{Op:"send", Net:"tcp", Source:net.Addr(nil), Addr:(*net.UnixAddr)(0xAAAABBBB), Err:innerone +innertwo} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&net.OpError{ + Op: "send", + Net: "tcp", + Source: nil, + Addr: &net.UnixAddr{Name:"unixhello", Net:"unixgram"}, + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +send tcp unixhello: innerone +(1) send tcp unixhello +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *net.OpError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +send tcp ‹unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +send tcp ‹unixhello›: ‹innerone› +(1) send tcp ‹unixhello› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *net.OpError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: send tcp ×: × +(1) send tcp × +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *net.OpError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*net.OpError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: send tcp ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-path outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:innerone +innertwo} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fs.PathError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fs.PathError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: link ×: × +(1) link × +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fs.PathError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fs.PathError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: link ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-syscall outerthree outerfour + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s) +---- +&os.SyscallError{ + Syscall: "open", + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:innerone +innertwo} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.SyscallError (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *os.SyscallError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: open: × +(1) open +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *os.SyscallError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*os.SyscallError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: open: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +pkgmsg outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.* +---- +&errors.withMessage{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +github.com/cockroachdb/errors/fmttests.init.func9 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.withMessage (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *errors.withMessage (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *errors.withMessage (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*errors.withMessage +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +pkgstack outerthree outerfour + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s) +---- +&errors.withStack{ + error: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +innerone +innertwo +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +innertwo +github.com/cockroachdb/errors/fmttests.init.func9 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +github.com/cockroachdb/errors/fmttests.init.func30 +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 +: +github.com/cockroachdb/datadriven.runDirective.func1 +: +github.com/cockroachdb/datadriven.runDirective +: +github.com/cockroachdb/datadriven.runDirectiveOrSubTest +: +github.com/cockroachdb/datadriven.runTestInternal +: +github.com/cockroachdb/datadriven.RunTest +: +github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 +: +github.com/cockroachdb/datadriven.Walk +: +github.com/cockroachdb/datadriven.Walk.func1 +: +testing.tRunner +: +runtime.goexit +: +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withStack{ + error: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + stack: &stack{...}, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +innerone +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | [...repeated from below...] +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.withStack (2) *errors.fundamental +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹innerone› +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | [...repeated from below...] +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *errors.withStack (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | [...repeated from below...] +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *errors.withStack (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +:: *errors.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +safedetails outerthree outerfour + +require (?s) +---- +&safedetails.withSafeDetails{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *safedetails.withSafeDetails (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *safedetails.withSafeDetails (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) safe × + | × +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *safedetails.withSafeDetails (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +safefmt outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&fmttests.werrSafeFormat{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrSafeFormat{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + msg: "outerthree\nouterfour", +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrSafeFormat (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +safe ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +safe ‹outerthree›: ‹innerone› +(1) safe ‹outerthree› + | ‹outerfour› +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *fmttests.werrSafeFormat (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: safe ×: × +(1) safe × + | × +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *fmttests.werrSafeFormat (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrSafeFormat +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: safe ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +secondary outerthree outerfour + +require (?s) +---- +&secondary.withSecondaryError{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + stack: &stack{...}, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *secondary.withSecondaryError (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *secondary.withSecondaryError (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) secondary error attachment + | outerthree + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *secondary.withSecondaryError (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +stack outerthree outerfour + +require (?s) +---- +&withstack.withStack{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + stack: &stack{...}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | [...repeated from below...] +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *withstack.withStack (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | [...repeated from below...] +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *withstack.withStack (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | [...repeated from below...] +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *withstack.withStack (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +tags outerthree outerfour + +require (?s) +---- +&contexttags.withContext{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + }, + prealloc: { + { + key: "k", + value: int(123), + }, + { + key: "safe", + value: redact.safeWrapper{ + a: int(456), + }, + }, + {}, + {}, + }, + }, + redactedTags: nil, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *contexttags.withContext (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=456] +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *contexttags.withContext (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) tags: [k×,safe=456] +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *contexttags.withContext (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*contexttags.withContext: k× +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +telemetry outerthree outerfour + +require (?s) +---- +&telemetrykeys.withTelemetry{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *telemetrykeys.withTelemetry (2) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +wrapf outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &errutil.withPrefix{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + stack: &stack{...}, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | [...repeated from below...] +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | [...repeated from below...] +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | [...repeated from below...] +Wraps: (2) new-stylew × + | × +Wraps: (3) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *withstack.withStack (2) *errutil.withPrefix (3) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: new-stylew ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +wrapf-attached outerthree outerfour + +require (?s)outerthree.*outerfour.* +---- +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +===== +===== non-redactable formats +===== +== %#v +&withstack.withStack{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errors.fundamental{ + msg: "innerone\ninnertwo", + stack: &stack{...}, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &withstack.withStack{ + cause: &errutil.leafError{msg:"payload"}, + stack: &stack{...}, + }, + }, + stack: &stack{...}, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.fundamental +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› +‹ | innertwo› +‹ | github.com/cockroachdb/errors/fmttests.init.func9› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective.func1› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirective› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runDirectiveOrSubTest› +‹ | :› +‹ | github.com/cockroachdb/datadriven.runTestInternal› +‹ | :› +‹ | github.com/cockroachdb/datadriven.RunTest› +‹ | :› +‹ | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk› +‹ | :› +‹ | github.com/cockroachdb/datadriven.Walk.func1› +‹ | :› +‹ | testing.tRunner› +‹ | :› +‹ | runtime.goexit› +‹ | :› +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.fundamental +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | [...repeated from below...] +Wraps: (2) secondary error attachment + | payload + | (1) attached stack trace + | -- stack trace: + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *withstack.withStack (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +× +Error types: (1) *withstack.withStack (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errors.fundamental +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: new-style ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/fmttests/testdata/format/wrap-pkgerr-via-network b/fmttests/testdata/format/wrap-pkgerr-via-network new file mode 100644 index 0000000..07eff34 --- /dev/null +++ b/fmttests/testdata/format/wrap-pkgerr-via-network @@ -0,0 +1,12100 @@ +run +pkgerr innerone innertwo +assertion outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func49\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func49 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +assertwrap outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&assert.withAssertionFailure{ + cause: &errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "assertmsg: ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func50\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +assertmsg: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +assertmsg: outerthree: innerone +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +assertmsg: ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +assertmsg: ‹outerthree›: ‹innerone› +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: ‹outerthree› + | ‹outerfour› +Wraps: (4) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +:: assertmsg: ×: × +(1) assertion failure +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func50 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) assertmsg: × + | × +Wraps: (4) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *assert.withAssertionFailure (2) *errbase.opaqueWrapper (3) *errutil.withPrefix (4) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +*errutil.withPrefix: assertmsg: × +:: *withstack.withStack (top exception) +*assert.withAssertionFailure +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/assert/*assert.withAssertionFailure (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*barriers.barrierErr: assertmsg: ×: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +barrier outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +== Exception 1 (Module: "error domain: ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +pkgerr innerone innertwo +delegate outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrDelegate +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +delegate-empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrDelegateEmpty +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +delegate-noprefix outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrDelegateNoPrefix +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrDelegateNoPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +detail outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withDetail{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + detail: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withDetail{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + detail: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withDetail (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*hintdetail.withDetail +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withDetail (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + domain: "mydomain", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + domain: "mydomain", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) mydomain +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) mydomain +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) mydomain +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *domains.withDomain (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*domains.withDomain: mydomain +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::mydomain) +== Exception 1 (Module: "mydomain") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour +---- +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.werrWithElidedCause{ + wrapped: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.werrWithElidedCause (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrWithElidedCause +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrWithElidedCause (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +empty outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrEmpty +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrEmpty (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmt +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt-old outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmto +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmto (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt-old-delegate outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmtoDelegate +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtoDelegate (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +fmt-partial outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrFmtp +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrFmtp (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +go-errorf outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour - innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +outerthree +outerfour - innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmt.wrapError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +go-errorf-multi outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueLeafCauses{ + opaqueLeaf: errbase.opaqueLeaf{ + msg: "outerthree\nouterfour - innerone\ninnertwo sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapErrors", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapErrors", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + }, + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueLeaf{ + msg: "sibling error in wrapper", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func23\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, +} +== Error() +outerthree +outerfour - innerone +innertwo sibling error in wrapper +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree +(1) outerthree + | outerfour - innerone + | innertwo sibling error in wrapper + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) sibling error in wrapper + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour - innerone› +‹innertwo sibling error in wrapper› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree› +(1) ‹outerthree› + | ‹outerfour - innerone› + | ‹innertwo sibling error in wrapper› + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) ‹sibling error in wrapper› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | × + | + | (opaque error leaf) + | type name: fmt/*fmt.wrapErrors +Wraps: (2) × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func23 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeafCauses (2) *errbase.opaqueLeaf (3) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +:: *errors.fundamental (1) +*fmt.wrapErrors +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapErrors (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +go-errorf-suffix outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "innerone\ninnertwo - outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 1, +} +== Error() +innerone +innertwo - outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo - outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo - outerthree› +‹outerfour› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo - outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × + | × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmt.wrapError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +goerr outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "fmt/*fmt.wrapError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"fmt/*fmt.wrapError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: fmt/*fmt.wrapError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmt.wrapError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +fmt/*fmt.wrapError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +handled-domain outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + domain: "error domain: pkg ", +} +===== +===== non-redactable formats +===== +== %#v +&domains.withDomain{ + cause: &barriers.barrierErr{ + smsg: "‹innerone›\n‹innertwo›", + maskedErr: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + domain: "error domain: pkg ", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) error domain: pkg +Wraps: (2) innerone + | innertwo + | -- cause hidden behind barrier + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) error domain: pkg +Wraps: (2) ‹innerone› + | ‹innertwo› + | -- cause hidden behind barrier + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +===== +===== Sentry reporting +===== +== Message payload +× +(1) error domain: pkg +Wraps: (2) × + | × + | -- cause hidden behind barrier + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Error types: (1) *domains.withDomain (2) *barriers.barrierErr +-- report composition: +*barriers.barrierErr: details for github.com/pkg/errors/*errors.fundamental::: +*domains.withDomain: error domain: pkg +== Extra "error types" +github.com/cockroachdb/errors/barriers/*barriers.barrierErr (*::) +github.com/cockroachdb/errors/domains/*domains.withDomain (*::error domain: pkg ) +== Exception 1 (Module: "error domain: pkg ") +Type: "*barriers.barrierErr" +Title: "×" +(NO STACKTRACE) + +run +pkgerr innerone innertwo +hint outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&hintdetail.withHint{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + hint: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&hintdetail.withHint{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + hint: "outerthree\nouterfour", +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *hintdetail.withHint (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*hintdetail.withHint +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/hintdetail/*hintdetail.withHint (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +issuelink outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&issuelink.withIssueLink{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&issuelink.withIssueLink{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + IssueLink: issuelink.IssueLink{IssueURL:"https://mysite", Detail:"outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) issue: https://mysite + | detail: outerthree + | outerfour +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *issuelink.withIssueLink (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*issuelink.withIssueLink: https://mysite +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/issuelink/*issuelink.withIssueLink (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +join outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&join.joinError{ + errs: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func63\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, +} +== Error() +innerone +innertwo +outerthree +outerfour +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) innerone + | innertwo + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +outerthree +outerfour +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) ‹innerone› + | ‹innertwo› + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +× +(1) × + | × + | outerthree + | outerfour +Wraps: (2) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func63 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +└─ Wraps: (3) outerthree + | outerfour +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *join.joinError (2) *errbase.opaqueWrapper (3) *errutil.leafError (4) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: outerthree +:: *withstack.withStack (top exception) +:: *errors.fundamental (1) +*join.joinError +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/join/*join.joinError (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +migrated outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"some/previous/path/prevpkg.prevType", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrMigrated +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrMigrated (some/previous/path/prevpkg.prevType::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +msg outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +&errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +outerthree: ‹innerone› +(1) outerthree + | outerfour +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: outerthree: × +(1) outerthree + | outerfour +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errutil.withPrefix (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withPrefix: outerthree +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: outerthree: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +multi-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"included 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func42\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: false, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: included 2: included 1: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: included 2: included 1: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: included 2: included 1: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: included 2: included 1: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) included 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) included 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func42 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: included 2 +:: *withstack.withStack (top exception) +*errutil.leafError: included 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: included 2: included 1: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +multi-elided-cause outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +===== +===== non-redactable formats +===== +== %#v +&fmttests.errMultiCause{ + causes: { + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "C", + elide: false, + }, + &fmttests.errMultiCause{ + causes: { + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 1"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"elided 2"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func43\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + msg: "B", + elide: true, + }, + }, + msg: "A", + elide: false, +} +== Error() +A: B: C: outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +A: B: C: outerthree: innerone +(1) A +Wraps: (2) B +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) C +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹A›: ‹B›: ‹C›: outerthree +outerfour: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹A›: ‹B›: ‹C›: outerthree: ‹innerone› +(1) ‹A› +Wraps: (2) ‹B› +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) ‹C› +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +×: ×: ×: outerthree: × +(1) × +Wraps: (2) × +└─ Wraps: (3) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (4) elided 2 +└─ Wraps: (5) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (6) elided 1 +Wraps: (7) × +└─ Wraps: (8) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func43 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : + └─ Wraps: (9) outerthree + | outerfour +└─ Wraps: (10) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fmttests.errMultiCause (2) *fmttests.errMultiCause (3) *errbase.opaqueWrapper (4) *errutil.leafError (5) *errbase.opaqueWrapper (6) *errutil.leafError (7) *fmttests.errMultiCause (8) *errbase.opaqueWrapper (9) *errutil.leafError (10) *errbase.opaqueLeaf +-- report composition: +*errutil.leafError: elided 2 +:: *withstack.withStack (top exception) +*errutil.leafError: elided 1 +:: *withstack.withStack (1) +*fmttests.errMultiCause +*errutil.leafError: outerthree +:: *withstack.withStack (2) +:: *errors.fundamental (3) +*fmttests.errMultiCause +*fmttests.errMultiCause +(check the extra data payloads) +== Extra "error types" +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/errutil/*errutil.leafError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.errMultiCause (*::) +== Exception 1 (Module: "error domain: ") +Type: "(3) : ...funcNN... +Title: "*errors.fundamental" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: "(2) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 3 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 4 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errutil.leafError: ×: ×: ×: outerthree: ×\nvia *withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +newfw outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + message: "new-style (‹outerthree›\n‹outerfour›) :: ‹innerone›\n‹innertwo› ::", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func46\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style (outerthree +outerfour) :: innerone +innertwo :: +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style (outerthree +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (outerthree + | outerfour) :: innerone + | innertwo :: +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style (‹outerthree› +‹outerfour›) :: ‹innerone› +‹innertwo› :: +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style (‹outerthree› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (‹outerthree› + | ‹outerfour›) :: ‹innerone› + | ‹innertwo› :: +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-style (× +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func46 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) new-style (× + | ×) :: × + | × :: +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withNewMessage: new-style (× +*secondary.withSecondaryError: details for github.com/pkg/errors/*errors.fundamental::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: new-style (×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +newfw-suffix outerthree outerfour +opaque + +require (?s)innerone.*innertwo.*outerthree.*outerfour +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withNewMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + message: ":: ‹innerone›\n‹innertwo› :: new-style (‹outerthree›\n‹outerfour›)", + }, + secondaryError: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func47\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +:: innerone +innertwo :: new-style (outerthree +outerfour) +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +:: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | innerone + | (1) innerone + | | innertwo + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: innerone + | innertwo :: new-style (outerthree + | outerfour) +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +:: ‹innerone› +‹innertwo› :: new-style (‹outerthree› +‹outerfour›) +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +:: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | ‹innerone› + | (1) ‹innerone› + | | ‹innertwo› + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: ‹innerone› + | ‹innertwo› :: new-style (‹outerthree› + | ‹outerfour›) +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: :: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func47 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | × + | (1) × + | | × + | | + | | (opaque error leaf) + | | type name: github.com/pkg/errors/*errors.fundamental + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func9 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Error types: (1) *errbase.opaqueLeaf +Wraps: (3) :: × + | × :: new-style (× + | ×) +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withNewMessage (4) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withNewMessage: :: × +*secondary.withSecondaryError: details for github.com/pkg/errors/*errors.fundamental::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withNewMessage (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: :: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +nofmt outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +outerthree: innerone +(1) outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹outerthree›: ‹innerone› +(1) ‹outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrNoFmt +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrNoFmt (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-link outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.LinkError{Op:"link", Old:"/path/to/file", New:"/path/to/newfile", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +link /path/to/file /path/to/newfile: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.LinkError{ + Op: "link", + Old: "/path/to/file", + New: "/path/to/newfile", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file /path/to/newfile: innerone +(1) link /path/to/file /path/to/newfile +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file› ‹/path/to/newfile›: ‹innerone› +(1) link ‹/path/to/file› ‹/path/to/newfile› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: link × ×: × +(1) link × × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.LinkError (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*os.LinkError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +os/*os.LinkError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: link × ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-netop outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "send tcp unixhello", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "net/*net.OpError", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"net/*net.OpError", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +send tcp unixhello: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +send tcp unixhello: innerone +(1) send tcp unixhello + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹send tcp unixhello›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹send tcp unixhello›: ‹innerone› +(1) ‹send tcp unixhello› + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | + | (opaque error wrapper) + | type name: net/*net.OpError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*net.OpError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +net/*net.OpError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-path outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&fs.PathError{Op:"link", Path:"/path/to/file", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +link /path/to/file: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&fs.PathError{ + Op: "link", + Path: "/path/to/file", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +link /path/to/file: innerone +(1) link /path/to/file +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +link ‹/path/to/file›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +link ‹/path/to/file›: ‹innerone› +(1) link ‹/path/to/file› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: link ×: × +(1) link × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *fs.PathError (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fs.PathError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +io/fs/*fs.PathError (os/*os.PathError::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: link ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +os-syscall outerthree outerfour +opaque + +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +accept %\#v via Formattable.*IRREGULAR: not same as %\#v + +require (?s)innerone.*innertwo +---- +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +===== +===== non-redactable formats +===== +== %#v +&os.SyscallError{Syscall:"open", Err:&errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, +}} +== Error() +open: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v = Error(), ok +== %#v via Formattable() (IRREGULAR: not same as %#v) +&os.SyscallError{ + Syscall: "open", + Err: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +open: innerone +(1) open +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +open: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +open: ‹innerone› +(1) open +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: open: × +(1) open +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *os.SyscallError (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*os.SyscallError +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +os/*os.SyscallError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: open: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +pkgmsg outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errors.withMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +===== +===== non-redactable formats +===== +== %#v +outerthree +outerfour: innerone +innertwo +== Error() +outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q (IRREGULAR: not same as quoted Error()) +outerthree +outerfour: innerone +innertwo +== %x (IRREGULAR: not same as hex Error()) +(EMPTY STRING) +== %X (IRREGULAR: not same as HEX Error()) +(EMPTY STRING) +== %+v +innerone +(1) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueLeaf +outerthree +outerfour +== %#v via Formattable() (IRREGULAR: not same as %#v) +&errors.withMessage{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + msg: "outerthree\nouterfour", +} +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() (IRREGULAR: not same as %+v) +outerthree: innerone +(1) outerthree + | outerfour +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v via Formattable() +‹outerthree›: ‹innerone› +(1) ‹outerthree› +‹ | outerfour› +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × +× +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errors.withMessage (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*errors.withMessage +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.withMessage (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +pkgstack outerthree outerfour +opaque + +accept %x.*IRREGULAR: not same as hex Error +accept %q.*IRREGULAR: not same as quoted Error +accept %X.*IRREGULAR: not same as HEX Error +accept %\#v via Formattable.*IRREGULAR: not same as %\#v +accept %\+v via Formattable.*IRREGULAR: not same as %\+v +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func30\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/pkg/errors/*errors.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func30 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +:: *errors.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/pkg/errors/*errors.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*errors.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +safedetails outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&safedetails.withSafeDetails{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + safeDetails: {"safe ×\n×"}, +} +===== +===== non-redactable formats +===== +== %#v +&safedetails.withSafeDetails{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + safeDetails: {"safe ×\n×"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) safe × + | × +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) safe × + | × +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) safe × + | × +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *safedetails.withSafeDetails (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*safedetails.withSafeDetails: safe × +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/safedetails/*safedetails.withSafeDetails (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +safefmt outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "safe outerthree\nouterfour", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat", Extension:""}, + ReportablePayload: nil, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +safe outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +safe outerthree: innerone +(1) safe outerthree + | outerfour + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹safe outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹safe outerthree›: ‹innerone› +(1) ‹safe outerthree› + | ‹outerfour› + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: ×: × +(1) × + | × + | + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*fmttests.werrSafeFormat +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/fmttests/*fmttests.werrSafeFormat (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +secondary outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&secondary.withSecondaryError{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +===== +===== non-redactable formats +===== +== %#v +&secondary.withSecondaryError{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"outerthree\nouterfour"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func58\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) secondary error attachment + | outerthree + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func58 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) outerthree + | | outerfour + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *secondary.withSecondaryError (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +stack outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func44\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func44 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +tags outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&contexttags.withContext{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +===== +===== non-redactable formats +===== +== %#v +&contexttags.withContext{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + tags: &logtags.Buffer{ + tags: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + }, + prealloc: { + { + key: "k", + value: "123", + }, + { + key: "safe", + value: "456", + }, + {}, + {}, + }, + }, + redactedTags: {"k×", "safe=456"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) tags: [k123,safe=456] +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) tags: [k‹123›,safe=‹456›] +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) tags: [k×,safe=×] +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *contexttags.withContext (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*contexttags.withContext: k× +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/contexttags/*contexttags.withContext (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +telemetry outerthree outerfour +opaque + +require (?s)innerone.*innertwo +---- +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +===== +===== non-redactable formats +===== +== %#v +&telemetrykeys.withTelemetry{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + keys: {"somekey", "outerthree\nouterfour"}, +} +== Error() +innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +innerone +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +‹innerone› +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: × +(1) keys: [somekey outerthree + | outerfour] +Wraps: (2) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *telemetrykeys.withTelemetry (2) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*telemetrykeys.withTelemetry: somekey +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/telemetrykeys/*telemetrykeys.withTelemetry (*::) +== Exception 1 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +wrapf outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-stylew ‹outerthree›\n‹outerfour›", + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func48\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-stylew outerthree +outerfour: innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-stylew outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew outerthree + | outerfour +Wraps: (3) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-stylew ‹outerthree› +‹outerfour›: ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-stylew ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew ‹outerthree› + | ‹outerfour› +Wraps: (3) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-stylew ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func48 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) new-stylew × + | × +Wraps: (3) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *errutil.withPrefix (3) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withPrefix: new-stylew × +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: new-stylew ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... + +run +pkgerr innerone innertwo +wrapf-attached outerthree outerfour +opaque + +require (?s)outerthree.*outerfour.*innerone.*innertwo +---- +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +===== +===== non-redactable formats +===== +== %#v +&errbase.opaqueWrapper{ + cause: &secondary.withSecondaryError{ + cause: &errutil.withPrefix{ + cause: &errbase.opaqueLeaf{ + msg: "innerone\ninnertwo", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/pkg/errors/*errors.fundamental", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/pkg/errors/*errors.fundamental", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func9\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + }, + prefix: "new-style ‹outerthree›\n‹outerfour› (payload)", + }, + secondaryError: &errbase.opaqueWrapper{ + cause: &errutil.leafError{msg:"payload"}, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, + }, + }, + prefix: "", + details: errorspb.EncodedErrorDetails{ + OriginalTypeName: "github.com/cockroachdb/errors/withstack/*withstack.withStack", + ErrorTypeMark: errorspb.ErrorTypeMark{FamilyName:"github.com/cockroachdb/errors/withstack/*withstack.withStack", Extension:""}, + ReportablePayload: {"\ngithub.com/cockroachdb/errors/fmttests.init.func59\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1\n\:\ngithub.com/cockroachdb/datadriven.runDirective.func1\n\:\ngithub.com/cockroachdb/datadriven.runDirective\n\:\ngithub.com/cockroachdb/datadriven.runDirectiveOrSubTest\n\:\ngithub.com/cockroachdb/datadriven.runTestInternal\n\:\ngithub.com/cockroachdb/datadriven.RunTest\n\:\ngithub.com/cockroachdb/errors/fmttests.TestDatadriven.func2\n\:\ngithub.com/cockroachdb/datadriven.Walk\n\:\ngithub.com/cockroachdb/datadriven.Walk.func1\n\:\ntesting.tRunner\n\:\nruntime.goexit\n\:"}, + FullDetails: (*types.Any)(nil), + }, + messageType: 0, +} +== Error() +new-style outerthree +outerfour (payload): innerone +innertwo +== %v = Error(), good +== %s = Error(), good +== %q = quoted Error(), good +== %x = hex Error(), good +== %X = HEX Error(), good +== %+v +new-style outerthree: innerone +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style outerthree + | outerfour (payload) +Wraps: (4) innerone + | innertwo + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +== %#v via Formattable() = %#v, good +== %v via Formattable() = Error(), good +== %s via Formattable() = %v via Formattable(), good +== %q via Formattable() = quoted %v via Formattable(), good +== %+v via Formattable() == %+v, good +===== +===== redactable formats +===== +== printed via redact Print(), ok - congruent with %v +new-style ‹outerthree› +‹outerfour› (payload): ‹innerone› +‹innertwo› +== printed via redact Printf() %v = Print(), good +== printed via redact Printf() %s = Print(), good +== printed via redact Printf() %q, refused - good +== printed via redact Printf() %x, refused - good +== printed via redact Printf() %X, refused - good +== printed via redact Printf() %+v, ok - congruent with %+v +new-style ‹outerthree›: ‹innerone› +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style ‹outerthree› + | ‹outerfour› (payload) +Wraps: (4) ‹innerone› + | ‹innertwo› + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +===== +===== Sentry reporting +===== +== Message payload +:: new-style ×: × +(1) + | (opaque error wrapper) + | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func59 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Wraps: (2) secondary error attachment + | payload + | (1) + | | (opaque error wrapper) + | | type name: github.com/cockroachdb/errors/withstack/*withstack.withStack + | | reportable 0: + | | + | | github.com/cockroachdb/errors/fmttests.init.func59 + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | | : + | | github.com/cockroachdb/datadriven.runDirective.func1 + | | : + | | github.com/cockroachdb/datadriven.runDirective + | | : + | | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | | : + | | github.com/cockroachdb/datadriven.runTestInternal + | | : + | | github.com/cockroachdb/datadriven.RunTest + | | : + | | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | | : + | | github.com/cockroachdb/datadriven.Walk + | | : + | | github.com/cockroachdb/datadriven.Walk.func1 + | | : + | | testing.tRunner + | | : + | | runtime.goexit + | | : + | Wraps: (2) payload + | Error types: (1) *errbase.opaqueWrapper (2) *errutil.leafError +Wraps: (3) new-style × + | × (payload) +Wraps: (4) × + | × + | + | (opaque error leaf) + | type name: github.com/pkg/errors/*errors.fundamental + | reportable 0: + | + | github.com/cockroachdb/errors/fmttests.init.func9 + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2.1 + | : + | github.com/cockroachdb/datadriven.runDirective.func1 + | : + | github.com/cockroachdb/datadriven.runDirective + | : + | github.com/cockroachdb/datadriven.runDirectiveOrSubTest + | : + | github.com/cockroachdb/datadriven.runTestInternal + | : + | github.com/cockroachdb/datadriven.RunTest + | : + | github.com/cockroachdb/errors/fmttests.TestDatadriven.func2 + | : + | github.com/cockroachdb/datadriven.Walk + | : + | github.com/cockroachdb/datadriven.Walk.func1 + | : + | testing.tRunner + | : + | runtime.goexit + | : +Error types: (1) *errbase.opaqueWrapper (2) *secondary.withSecondaryError (3) *errutil.withPrefix (4) *errbase.opaqueLeaf +-- report composition: +:: *errors.fundamental (top exception) +*errutil.withPrefix: new-style × +*secondary.withSecondaryError: details for github.com/cockroachdb/errors/withstack/*withstack.withStack::: +:: *withstack.withStack (1) +(check the extra data payloads) +== Extra "error types" +github.com/pkg/errors/*errors.fundamental (*::) +github.com/cockroachdb/errors/errutil/*errutil.withPrefix (*::) +github.com/cockroachdb/errors/secondary/*secondary.withSecondaryError (*::) +github.com/cockroachdb/errors/withstack/*withstack.withStack (*::) +== Exception 1 (Module: "error domain: ") +Type: "(1) : ...funcNN... +Title: "*withstack.withStack" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... +== Exception 2 (Module: "error domain: ") +Type: ": ...funcNN... +Title: "*errors.fundamental: new-style ×: ×" +:: + (runtime) goexit() +:: + (testing) tRunner() +:: + (github.com/cockroachdb/datadriven.Walk)...funcNN... +:: + (github.com/cockroachdb/datadriven) Walk() +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven)...funcNN... +:: + (github.com/cockroachdb/datadriven) RunTest() +:: + (github.com/cockroachdb/datadriven) runTestInternal() +:: + (github.com/cockroachdb/datadriven) runDirectiveOrSubTest() +:: + (github.com/cockroachdb/datadriven) runDirective() +:: + (github.com/cockroachdb/datadriven.runDirective)...funcNN... +:: + (github.com/cockroachdb/errors/fmttests.TestDatadriven.func2) 1() +:: + (github.com/cockroachdb/errors/fmttests.init)...funcNN... diff --git a/go.mod b/go.mod index 24f08f7..7297c44 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,35 @@ module github.com/cockroachdb/errors -go 1.13 +go 1.23.0 + +toolchain go1.23.8 require ( - github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f - github.com/cockroachdb/sentry-go v0.3.999 - github.com/gogo/protobuf v1.3.1 + github.com/cockroachdb/datadriven v1.0.2 + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b + github.com/cockroachdb/redact v1.1.5 + github.com/getsentry/sentry-go v0.27.0 + github.com/gogo/googleapis v1.4.1 // gogoproto 1.2-compatible, for CRDB + github.com/gogo/protobuf v1.3.2 github.com/gogo/status v1.1.0 - github.com/golang/protobuf v1.3.2 - github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb - github.com/kr/pretty v0.1.0 - github.com/pkg/errors v0.8.1 - google.golang.org/grpc v1.26.0 + github.com/hydrogen18/memlistener v1.0.0 + github.com/kr/pretty v0.3.1 + github.com/pkg/errors v0.9.1 + github.com/stretchr/testify v1.8.2 + google.golang.org/grpc v1.56.3 + google.golang.org/protobuf v1.33.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 717b067..0cb96e1 100644 --- a/go.sum +++ b/go.sum @@ -1,224 +1,106 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= -github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7/go.mod h1:6E6s8o2AE4KhCrqr6GRJjdC/gNfTdxkIXvuGZZda2VM= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY= -github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/cockroachdb/sentry-go v0.3.999 h1:/RJyWT8+9JyHOcm9Xf0aOd8kQkiBJAcZU3qWyzm8wkU= -github.com/cockroachdb/sentry-go v0.3.999/go.mod h1:mU2kGD7yn2rfWGd6o2x0/V2qNXVWiZZVoxukn5kCdaw= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a h1:dR8+Q0uO5S2ZBcs2IH6VBKYwSxPo2vYCYq0ot0mu7xA= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0 h1:+eIkrewn5q6b30y+g/BJINVVdi2xH7je5MPJ3ZPK3JA= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb h1:EPRgaDqXpLFUJLXZdGLnBTy1l6CLiNAPnvn2l+kHit0= -github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= -github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/kataras/golog v0.0.9/go.mod h1:12HJgwBIZFNGL0EJnMRhmvGA0PQGx8VFwrZtM4CqbAk= -github.com/kataras/iris/v12 v12.0.1/go.mod h1:udK4vLQKkdDqMGJJVd/msuMtN6hpYJhg/lSzuxjhO+U= -github.com/kataras/neffos v0.0.10/go.mod h1:ZYmJC07hQPW67eKuzlfY7SO3bC0mw83A3j6im82hfqw= -github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiDuX9AhMbDPkGYSPugBOV6yTZB1l2K9Z0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/hydrogen18/memlistener v1.0.0 h1:JR7eDj8HD6eXrc5fWLbSUnfcQFL06PYvCc0DKQnWfaU= +github.com/hydrogen18/memlistener v1.0.0/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= -github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= -github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a h1:aYOabOQFp6Vj6W1F80affTUvO9UxmJRx8K0gsfABByQ= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc= +google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/grpc/client_test.go b/grpc/client_test.go index c7b8ce1..7002378 100644 --- a/grpc/client_test.go +++ b/grpc/client_test.go @@ -19,7 +19,7 @@ func TestGrpc(t *testing.T) { // A successful call should return the message, a nil error, and the status code should evaluate to codes.OK resp, err := Client.Echo(context.Background(), &EchoRequest{Text: "hello"}) tt.Assert(err == nil) - tt.Assert(resp.GetReply() == "echoing: hello") + tt.Assert(resp.Reply == "echoing: hello") tt.Assert(status.Code(err) == codes.OK) // A sentinel error should be detectable across grpc boundaries diff --git a/grpc/echoer.pb.go b/grpc/echoer.pb.go index c54b363..af68681 100644 --- a/grpc/echoer.pb.go +++ b/grpc/echoer.pb.go @@ -1,16 +1,18 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: echoer.proto +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: grpc/echoer.proto package grpc import ( context "context" fmt "fmt" - proto "github.com/golang/protobuf/proto" + proto "github.com/gogo/protobuf/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" + io "io" math "math" + math_bits "math/bits" ) // Reference imports to suppress errors if they are not otherwise used. @@ -22,33 +24,34 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type EchoRequest struct { - Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` } func (m *EchoRequest) Reset() { *m = EchoRequest{} } func (m *EchoRequest) String() string { return proto.CompactTextString(m) } func (*EchoRequest) ProtoMessage() {} func (*EchoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e543a5b27882b13c, []int{0} + return fileDescriptor_020888ec1d9774f9, []int{0} } - func (m *EchoRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EchoRequest.Unmarshal(m, b) + return m.Unmarshal(b) } func (m *EchoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EchoRequest.Marshal(b, m, deterministic) + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } func (m *EchoRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_EchoRequest.Merge(m, src) } func (m *EchoRequest) XXX_Size() int { - return xxx_messageInfo_EchoRequest.Size(m) + return m.Size() } func (m *EchoRequest) XXX_DiscardUnknown() { xxx_messageInfo_EchoRequest.DiscardUnknown(m) @@ -56,38 +59,32 @@ func (m *EchoRequest) XXX_DiscardUnknown() { var xxx_messageInfo_EchoRequest proto.InternalMessageInfo -func (m *EchoRequest) GetText() string { - if m != nil { - return m.Text - } - return "" -} - type EchoReply struct { - Reply string `protobuf:"bytes,1,opt,name=reply,proto3" json:"reply,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Reply string `protobuf:"bytes,1,opt,name=reply,proto3" json:"reply,omitempty"` } func (m *EchoReply) Reset() { *m = EchoReply{} } func (m *EchoReply) String() string { return proto.CompactTextString(m) } func (*EchoReply) ProtoMessage() {} func (*EchoReply) Descriptor() ([]byte, []int) { - return fileDescriptor_e543a5b27882b13c, []int{1} + return fileDescriptor_020888ec1d9774f9, []int{1} } - func (m *EchoReply) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EchoReply.Unmarshal(m, b) + return m.Unmarshal(b) } func (m *EchoReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EchoReply.Marshal(b, m, deterministic) + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil } func (m *EchoReply) XXX_Merge(src proto.Message) { xxx_messageInfo_EchoReply.Merge(m, src) } func (m *EchoReply) XXX_Size() int { - return xxx_messageInfo_EchoReply.Size(m) + return m.Size() } func (m *EchoReply) XXX_DiscardUnknown() { xxx_messageInfo_EchoReply.DiscardUnknown(m) @@ -95,31 +92,26 @@ func (m *EchoReply) XXX_DiscardUnknown() { var xxx_messageInfo_EchoReply proto.InternalMessageInfo -func (m *EchoReply) GetReply() string { - if m != nil { - return m.Reply - } - return "" -} - func init() { proto.RegisterType((*EchoRequest)(nil), "grpc.EchoRequest") proto.RegisterType((*EchoReply)(nil), "grpc.EchoReply") } -func init() { proto.RegisterFile("echoer.proto", fileDescriptor_e543a5b27882b13c) } +func init() { proto.RegisterFile("grpc/echoer.proto", fileDescriptor_020888ec1d9774f9) } -var fileDescriptor_e543a5b27882b13c = []byte{ - // 131 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x49, 0x4d, 0xce, 0xc8, - 0x4f, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x49, 0x2f, 0x2a, 0x48, 0x56, 0x52, - 0xe4, 0xe2, 0x76, 0x4d, 0xce, 0xc8, 0x0f, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e, 0x11, 0x12, 0xe2, - 0x62, 0x29, 0x49, 0xad, 0x28, 0x91, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x02, 0xb3, 0x95, 0x14, - 0xb9, 0x38, 0x21, 0x4a, 0x0a, 0x72, 0x2a, 0x85, 0x44, 0xb8, 0x58, 0x8b, 0x40, 0x0c, 0xa8, 0x0a, - 0x08, 0xc7, 0xc8, 0x8c, 0x8b, 0xcd, 0x15, 0x6c, 0xb6, 0x90, 0x0e, 0x17, 0x0b, 0x88, 0x25, 0x24, - 0xa8, 0x07, 0x32, 0x5e, 0x0f, 0xc9, 0x6c, 0x29, 0x7e, 0x64, 0xa1, 0x82, 0x9c, 0x4a, 0x25, 0x86, - 0x24, 0x36, 0xb0, 0x53, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x64, 0x7c, 0x24, 0x04, 0x9a, - 0x00, 0x00, 0x00, +var fileDescriptor_020888ec1d9774f9 = []byte{ + // 170 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4c, 0x2f, 0x2a, 0x48, + 0xd6, 0x4f, 0x4d, 0xce, 0xc8, 0x4f, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x01, + 0x09, 0x29, 0x29, 0x72, 0x71, 0xbb, 0x26, 0x67, 0xe4, 0x07, 0xa5, 0x16, 0x96, 0xa6, 0x16, 0x97, + 0x08, 0x09, 0x71, 0xb1, 0x94, 0xa4, 0x56, 0x94, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x81, + 0xd9, 0x4a, 0x8a, 0x5c, 0x9c, 0x10, 0x25, 0x05, 0x39, 0x95, 0x42, 0x22, 0x5c, 0xac, 0x45, 0x20, + 0x06, 0x54, 0x05, 0x84, 0x63, 0x64, 0xc6, 0xc5, 0xe6, 0x0a, 0x36, 0x5b, 0x48, 0x87, 0x8b, 0x05, + 0xc4, 0x12, 0x12, 0xd4, 0x03, 0x19, 0xaf, 0x87, 0x64, 0xb6, 0x14, 0x3f, 0xb2, 0x50, 0x41, 0x4e, + 0xa5, 0x12, 0x83, 0x93, 0xc2, 0x89, 0x87, 0x72, 0x0c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, + 0xc7, 0x78, 0xe3, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, + 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x12, 0x1b, 0xd8, 0xb1, 0xc6, 0x80, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x5a, 0xcd, 0x52, 0xa6, 0xc1, 0x00, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -199,5 +191,357 @@ var _Echoer_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "echoer.proto", + Metadata: "grpc/echoer.proto", +} + +func (m *EchoRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil } + +func (m *EchoRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EchoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Text) > 0 { + i -= len(m.Text) + copy(dAtA[i:], m.Text) + i = encodeVarintEchoer(dAtA, i, uint64(len(m.Text))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EchoReply) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EchoReply) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EchoReply) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Reply) > 0 { + i -= len(m.Reply) + copy(dAtA[i:], m.Reply) + i = encodeVarintEchoer(dAtA, i, uint64(len(m.Reply))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintEchoer(dAtA []byte, offset int, v uint64) int { + offset -= sovEchoer(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *EchoRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Text) + if l > 0 { + n += 1 + l + sovEchoer(uint64(l)) + } + return n +} + +func (m *EchoReply) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Reply) + if l > 0 { + n += 1 + l + sovEchoer(uint64(l)) + } + return n +} + +func sovEchoer(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEchoer(x uint64) (n int) { + return sovEchoer(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *EchoRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEchoer + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EchoRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EchoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Text", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEchoer + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEchoer + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEchoer + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Text = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEchoer(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEchoer + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EchoReply) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEchoer + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EchoReply: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EchoReply: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEchoer + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEchoer + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEchoer + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reply = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEchoer(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEchoer + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEchoer(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEchoer + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEchoer + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEchoer + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthEchoer + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupEchoer + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthEchoer + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthEchoer = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEchoer = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupEchoer = fmt.Errorf("proto: unexpected end of group") +) diff --git a/grpc/grpc.go b/grpc/grpc.go deleted file mode 100644 index 5eafe75..0000000 --- a/grpc/grpc.go +++ /dev/null @@ -1,3 +0,0 @@ -package grpc - -//go:generate protoc echoer.proto --go_out=plugins=grpc:. diff --git a/grpc/server_test.go b/grpc/server_test.go index 54fca5c..42bb2e6 100644 --- a/grpc/server_test.go +++ b/grpc/server_test.go @@ -17,7 +17,7 @@ type EchoServer struct { } func (srv *EchoServer) Echo(ctx context.Context, req *EchoRequest) (*EchoReply, error) { - msg := req.GetText() + msg := req.Text switch { case msg == "noecho": return nil, ErrCantEcho diff --git a/grpc/status/status.go b/grpc/status/status.go index 7c18eb9..3a248e9 100644 --- a/grpc/status/status.go +++ b/grpc/status/status.go @@ -11,10 +11,18 @@ func Error(c codes.Code, msg string) error { return extgrpc.WrapWithGrpcCode(errors.New(msg), c) } +func Errorf(c codes.Code, format string, args ...interface{}) error { + return extgrpc.WrapWithGrpcCode(errors.Newf(format, args...), c) +} + func WrapErr(c codes.Code, msg string, err error) error { return extgrpc.WrapWithGrpcCode(errors.WrapWithDepth(1, err, msg), c) } +func WrapErrf(c codes.Code, err error, format string, args ...interface{}) error { + return extgrpc.WrapWithGrpcCode(errors.WrapWithDepthf(1, err, format, args...), c) +} + func Code(err error) codes.Code { return extgrpc.GetGrpcCode(err) } diff --git a/hintdetail/hintdetail.go b/hintdetail/hintdetail.go index ac12333..81c3156 100644 --- a/hintdetail/hintdetail.go +++ b/hintdetail/hintdetail.go @@ -23,6 +23,7 @@ import ( // WithHint decorates an error with a textual hint. // The hint may contain PII and thus will not reportable. +// The suggested use case for hint is to relay information to end users. // // Hint is shown: // - when formatting with `%+v`. @@ -97,10 +98,12 @@ type ErrorHinter interface { // WithDetail decorates an error with a textual detail. // The detail may contain PII and thus will not reportable. +// The suggested use case for detail is to augment errors with information +// useful for debugging. // // Detail is shown: // - when formatting with `%+v`. -// - with `GetAllHints()` / `FlattenHints()` below. +// - with `GetAllDetails()` / `FlattenDetails()` below. // // Note: the detail does not appear in the main error message returned // with Error(). Use GetAllDetails() or FlattenDetails() to retrieve diff --git a/hintdetail/with_detail.go b/hintdetail/with_detail.go index d238c77..14c8a44 100644 --- a/hintdetail/with_detail.go +++ b/hintdetail/with_detail.go @@ -41,7 +41,9 @@ func (w *withDetail) Unwrap() error { return w.cause } func (w *withDetail) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } func (w *withDetail) FormatError(p errbase.Printer) error { - p.Print(w.detail) + if p.Detail() { + p.Print(w.detail) + } return w.cause } diff --git a/hintdetail/with_hint.go b/hintdetail/with_hint.go index de2d3df..8b85385 100644 --- a/hintdetail/with_hint.go +++ b/hintdetail/with_hint.go @@ -41,7 +41,9 @@ func (w *withHint) Unwrap() error { return w.cause } func (w *withHint) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } func (w *withHint) FormatError(p errbase.Printer) error { - p.Print(w.hint) + if p.Detail() { + p.Print(w.hint) + } return w.cause } @@ -55,7 +57,7 @@ func decodeWithHint( ) error { m, ok := payload.(*errorspb.StringPayload) if !ok { - //aa If this ever happens, this means some version of the library + // If this ever happens, this means some version of the library // (presumably future) changed the payload type, and we're // receiving this here. In this case, give up and let // DecodeError use the opaque type. diff --git a/hintdetail_api.go b/hintdetail_api.go index 8df54e4..01a9501 100644 --- a/hintdetail_api.go +++ b/hintdetail_api.go @@ -16,36 +16,67 @@ package errors import "github.com/cockroachdb/errors/hintdetail" -// ErrorHinter forwards a definition. +// ErrorHinter is implemented by types that can provide +// user-informing detail strings. This is implemented by withHint +// here, withIssueLink, assertionFailure and pgerror.Error. type ErrorHinter = hintdetail.ErrorHinter -// ErrorDetailer forwards a definition. +// ErrorDetailer is implemented by types that can provide +// user-informing detail strings. type ErrorDetailer = hintdetail.ErrorDetailer -// WithHint forwards a definition. +// WithHint decorates an error with a textual hint. +// The hint may contain PII and thus will not reportable. +// The suggested use case for hint is to relay information to end users. +// +// Hint is shown: +// - when formatting with `%+v`. +// - with `GetAllHints()` / `FlattenHints()` below. +// +// Note: the hint does not appear in the main error message returned +// with Error(). Use GetAllHints() or FlattenHints() to retrieve it. func WithHint(err error, msg string) error { return hintdetail.WithHint(err, msg) } -// WithHintf forwards a definition. +// WithHintf is a helper that formats the hint. +// See the documentation of WithHint() for details. func WithHintf(err error, format string, args ...interface{}) error { return hintdetail.WithHintf(err, format, args...) } -// WithDetail forwards a definition. +// WithDetail decorates an error with a textual detail. +// The detail may contain PII and thus will not reportable. +// The suggested use case for detail is to augment errors with information +// useful for debugging. +// +// Detail is shown: +// - when formatting with `%+v`. +// - with `GetAllDetails()` / `FlattenDetails()` below. +// +// Note: the detail does not appear in the main error message returned +// with Error(). Use GetAllDetails() or FlattenDetails() to retrieve +// it. func WithDetail(err error, msg string) error { return hintdetail.WithDetail(err, msg) } -// WithDetailf forwards a definition. +// WithDetailf is a helper that formats the detail string. +// See the documentation of WithDetail() for details. func WithDetailf(err error, format string, args ...interface{}) error { return hintdetail.WithDetailf(err, format, args...) } -// GetAllHints forwards a definition. +// GetAllHints retrieves the hints from the error using in post-order +// traversal. The hints are de-duplicated. Assertion failures, issue +// links and unimplemented errors are detected and receive standard +// hints. func GetAllHints(err error) []string { return hintdetail.GetAllHints(err) } -// FlattenHints forwards a definition. +// FlattenHints retrieves the hints as per GetAllHints() and +// concatenates them into a single string. func FlattenHints(err error) string { return hintdetail.FlattenHints(err) } -// GetAllDetails forwards a definition. +// GetAllDetails retrieves the details from the error using in post-order +// traversal. func GetAllDetails(err error) []string { return hintdetail.GetAllDetails(err) } -// FlattenDetails forwards a definition. +// FlattenDetails retrieves the details as per GetAllDetails() and +// concatenates them into a single string. func FlattenDetails(err error) string { return hintdetail.FlattenDetails(err) } diff --git a/issuelink/unimplemented_error.go b/issuelink/unimplemented_error.go index 066fb45..af64df1 100644 --- a/issuelink/unimplemented_error.go +++ b/issuelink/unimplemented_error.go @@ -20,17 +20,19 @@ import ( "fmt" "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) type unimplementedError struct { + // For now, msg is non-reportable. msg string IssueLink } var _ error = (*unimplementedError)(nil) var _ fmt.Formatter = (*unimplementedError)(nil) -var _ errbase.Formatter = (*unimplementedError)(nil) +var _ errbase.SafeFormatter = (*unimplementedError)(nil) var _ errbase.SafeDetailer = (*unimplementedError)(nil) func (w *unimplementedError) Error() string { return w.msg } @@ -51,13 +53,18 @@ const UnimplementedErrorHint = `You have attempted to use a feature that is not func (w *unimplementedError) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *unimplementedError) FormatError(p errbase.Printer) error { - p.Printf("unimplemented: %s", w.msg) - if w.IssueURL != "" { - p.Printf("\nissue: %s", w.IssueURL) - } - if w.Detail != "" { - p.Printf("\ndetail: %s", w.Detail) +func (w *unimplementedError) SafeFormatError(p errbase.Printer) error { + // For now, msg is non-reportable. + p.Print(w.msg) + if p.Detail() { + // But the details are. + p.Printf("unimplemented") + if w.IssueURL != "" { + p.Printf("\nissue: %s", redact.Safe(w.IssueURL)) + } + if w.Detail != "" { + p.Printf("\ndetail: %s", redact.Safe(w.Detail)) + } } return nil } diff --git a/issuelink/unimplemented_test.go b/issuelink/unimplemented_test.go index 56edecb..c0b8164 100644 --- a/issuelink/unimplemented_test.go +++ b/issuelink/unimplemented_test.go @@ -76,14 +76,16 @@ func TestFormatUnimp(t *testing.T) { issuelink.UnimplementedError(link, "woo"), woo, ` woo -(1) unimplemented: woo +(1) woo + | unimplemented | issue: http://mysite Error types: (1) *issuelink.unimplementedError`}, {"unimp-details", issuelink.UnimplementedError(issuelink.IssueLink{IssueURL: "http://mysite", Detail: "see more"}, "woo"), woo, ` woo -(1) unimplemented: woo +(1) woo + | unimplemented | issue: http://mysite | detail: see more Error types: (1) *issuelink.unimplementedError`}, @@ -95,7 +97,8 @@ waa: woo (1) waa | -- this is waa's | multi-line payload -Wraps: (2) unimplemented: woo +Wraps: (2) woo + | unimplemented | issue: http://mysite Error types: (1) *issuelink_test.werrFmt (2) *issuelink.unimplementedError`}, } diff --git a/issuelink/with_issuelink.go b/issuelink/with_issuelink.go index 785a773..4223338 100644 --- a/issuelink/with_issuelink.go +++ b/issuelink/with_issuelink.go @@ -21,6 +21,7 @@ import ( "github.com/cockroachdb/errors/errbase" "github.com/cockroachdb/errors/stdstrings" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) @@ -32,7 +33,7 @@ type withIssueLink struct { var _ error = (*withIssueLink)(nil) var _ errbase.SafeDetailer = (*withIssueLink)(nil) var _ fmt.Formatter = (*withIssueLink)(nil) -var _ errbase.Formatter = (*withIssueLink)(nil) +var _ errbase.SafeFormatter = (*withIssueLink)(nil) func (w *withIssueLink) Error() string { return w.cause.Error() } func (w *withIssueLink) Cause() error { return w.cause } @@ -64,14 +65,16 @@ func maybeAppendReferral(buf *bytes.Buffer, link IssueLink) { func (w *withIssueLink) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *withIssueLink) FormatError(p errbase.Printer) error { - sep := "" - if w.IssueURL != "" { - p.Printf("issue: %s", w.IssueURL) - sep = "\n" - } - if w.Detail != "" { - p.Printf("%sdetail: %s", sep, w.Detail) +func (w *withIssueLink) SafeFormatError(p errbase.Printer) error { + if p.Detail() { + sep := redact.SafeString("") + if w.IssueURL != "" { + p.Printf("issue: %s", redact.Safe(w.IssueURL)) + sep = "\n" + } + if w.Detail != "" { + p.Printf("%sdetail: %s", sep, redact.Safe(w.Detail)) + } } return w.cause } diff --git a/issuelink_api.go b/issuelink_api.go index 22f6db1..4319158 100644 --- a/issuelink_api.go +++ b/issuelink_api.go @@ -16,36 +16,58 @@ package errors import "github.com/cockroachdb/errors/issuelink" -// WithIssueLink forwards a definition. +// WithIssueLink adds an annotation to a know issue +// on a web issue tracker. +// +// The url and detail strings may contain PII and will +// be considered reportable. +// +// Detail is shown: +// - via `errors.GetSafeDetails()` +// - when formatting with `%+v`. +// - in Sentry reports. +// - via `errors.GetAllHints()` / `errors.FlattenHints()` func WithIssueLink(err error, issue IssueLink) error { return issuelink.WithIssueLink(err, issue) } -// IssueLink forwards a definition. +// IssueLink is the payload for a linked issue annotation. type IssueLink = issuelink.IssueLink -// UnimplementedError forwards a definition. +// UnimplementedError creates a new leaf error that indicates that +// some feature was not (yet) implemented. +// +// Detail is shown: +// - via `errors.GetSafeDetails()` +// - when formatting with `%+v`. +// - in Sentry reports. +// - via `errors.GetAllHints()` / `errors.FlattenHints()` func UnimplementedError(issueLink IssueLink, msg string) error { return issuelink.UnimplementedError(issueLink, msg) } -// UnimplementedErrorf forwards a definition. +// UnimplementedErrorf creates a new leaf error that indicates that +// some feature was not (yet) implemented. The message is formatted. func UnimplementedErrorf(issueLink IssueLink, format string, args ...interface{}) error { return issuelink.UnimplementedErrorf(issueLink, format, args...) } -// GetAllIssueLinks forwards a definition. +// GetAllIssueLinks retrieves the linked issue carried +// by the error or its direct causes. func GetAllIssueLinks(err error) (issues []IssueLink) { return issuelink.GetAllIssueLinks(err) } -// HasIssueLink forwards a definition. +// HasIssueLink returns true iff the error or one of its +// causes has a linked issue payload. func HasIssueLink(err error) bool { return issuelink.HasIssueLink(err) } -// IsIssueLink forwards a definition. +// IsIssueLink returns true iff the error (not its +// causes) has a linked issue payload. func IsIssueLink(err error) bool { return issuelink.IsIssueLink(err) } -// HasUnimplementedError forwards a definition. +// HasUnimplementedError returns iff if err or its cause is an +// unimplemented error. func HasUnimplementedError(err error) bool { return issuelink.HasUnimplementedError(err) } -// IsUnimplementedError forwards a definition. +// IsUnimplementedError returns iff if err is an unimplemented error. func IsUnimplementedError(err error) bool { return issuelink.IsUnimplementedError(err) } -// UnimplementedErrorHint forwards a definition. +// UnimplementedErrorHint is the hint emitted upon unimplemented errors. const UnimplementedErrorHint = issuelink.UnimplementedErrorHint diff --git a/join/join.go b/join/join.go new file mode 100644 index 0000000..7ca5fcd --- /dev/null +++ b/join/join.go @@ -0,0 +1,105 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package join + +import ( + "context" + "fmt" + + "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" + "github.com/gogo/protobuf/proto" +) + +// Join returns an error that wraps the given errors. +// Any nil error values are discarded. +// Join returns nil if errs contains no non-nil values. +// The error formats as the concatenation of the strings obtained +// by calling the Error method of each element of errs, with a newline +// between each string. +func Join(errs ...error) error { + n := 0 + for _, err := range errs { + if err != nil { + n++ + } + } + if n == 0 { + return nil + } + e := &joinError{ + errs: make([]error, 0, n), + } + for _, err := range errs { + if err != nil { + e.errs = append(e.errs, err) + } + } + return e +} + +type joinError struct { + errs []error +} + +var _ error = (*joinError)(nil) +var _ fmt.Formatter = (*joinError)(nil) +var _ errbase.SafeFormatter = (*joinError)(nil) + +func (e *joinError) Error() string { + return redact.Sprint(e).StripMarkers() +} + +func (e *joinError) Unwrap() []error { + return e.errs +} + +func (e *joinError) SafeFormatError(p errbase.Printer) error { + for i, err := range e.errs { + if i > 0 { + p.Print("\n") + } + p.Print(err) + } + return nil +} + +func (e *joinError) Format(s fmt.State, verb rune) { + errbase.FormatError(e, s, verb) +} + +func init() { + errbase.RegisterMultiCauseEncoder( + errbase.GetTypeKey(&joinError{}), + func( + ctx context.Context, + err error, + ) (msg string, safeDetails []string, payload proto.Message) { + return "", nil, nil + }, + ) + errbase.RegisterMultiCauseDecoder( + errbase.GetTypeKey(&joinError{}), + func( + ctx context.Context, + causes []error, + msgPrefix string, + safeDetails []string, + payload proto.Message, + ) error { + return Join(causes...) + }, + ) +} diff --git a/join/join_test.go b/join/join_test.go new file mode 100644 index 0000000..aaf4b70 --- /dev/null +++ b/join/join_test.go @@ -0,0 +1,57 @@ +// Copyright 2019 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package join + +import ( + "errors" + "testing" + + "github.com/cockroachdb/errors/safedetails" + "github.com/cockroachdb/redact" +) + +func TestJoin(t *testing.T) { + e := Join(errors.New("abc123"), errors.New("def456")) + expected := "abc123\ndef456" + if e.Error() != expected { + t.Errorf("Expected: %s; Got: %s", expected, e.Error()) + } + + e = Join(errors.New("abc123"), nil, errors.New("def456"), nil) + if e.Error() != expected { + t.Errorf("Expected: %s; Got: %s", expected, e.Error()) + } + + e = Join(nil, nil, nil) + if e != nil { + t.Errorf("expected nil error") + } + + e = Join( + errors.New("information"), + safedetails.WithSafeDetails(errors.New("detailed error"), "trace_id: %d", redact.Safe(1234)), + ) + printed := redact.Sprintf("%+v", e) + expectedR := redact.RedactableString(`‹information› +(1) ‹information› + | ‹detailed error› +Wraps: (2) trace_id: 1234 +└─ Wraps: (3) ‹detailed error› +Wraps: (4) ‹information› +Error types: (1) *join.joinError (2) *safedetails.withSafeDetails (3) *errors.errorString (4) *errors.errorString`) + if printed != expectedR { + t.Errorf("Expected: %s; Got: %s", expectedR, printed) + } +} diff --git a/markers/example_is_type_test.go b/markers/example_has_type_test.go similarity index 80% rename from markers/example_is_type_test.go rename to markers/example_has_type_test.go index f41c6a6..a7c6d70 100644 --- a/markers/example_is_type_test.go +++ b/markers/example_has_type_test.go @@ -26,40 +26,34 @@ type ExampleError struct{ msg string } func (e *ExampleError) Error() string { return e.msg } -func ExampleIsType() { +func ExampleHasType() { base := &ExampleError{"world"} err := errors.Wrap(base, "hello") fmt.Println(markers.HasType(err, (*ExampleError)(nil))) - fmt.Println(markers.IsType(err, (*ExampleError)(nil))) fmt.Println(markers.HasType(err, nil)) - fmt.Println(markers.IsType(err, nil)) fmt.Println(markers.HasType(err, (*net.AddrError)(nil))) - fmt.Println(markers.IsType(err, (*net.AddrError)(nil))) // Output: // // true // false // false - // false - // false - // false } -func ExampleIsInterface() { +func ExampleHasInterface() { base := &net.AddrError{ Addr: "ndn", Err: "ndn doesn't really exists :(", } err := errors.Wrap(base, "bummer") - fmt.Println(markers.IsInterface(err, (*net.Error)(nil))) + fmt.Println(markers.HasInterface(err, (*net.Error)(nil))) func() { defer func() { if r := recover(); r != nil { fmt.Println("*net.AddrError is not a pointer to an interface type so the call panics") } }() - fmt.Println(markers.IsInterface(err, (*net.AddrError)(nil))) + fmt.Println(markers.HasInterface(err, (*net.AddrError)(nil))) }() // Output: diff --git a/markers/internal/unknown.pb.go b/markers/internal/unknown.pb.go index 02c04b3..472b610 100644 --- a/markers/internal/unknown.pb.go +++ b/markers/internal/unknown.pb.go @@ -1,17 +1,16 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: errors/markers/internal/unknown.proto +// source: markers/internal/unknown.proto package internal import ( fmt "fmt" + proto "github.com/gogo/protobuf/proto" io "io" math "math" - - proto "github.com/gogo/protobuf/proto" + math_bits "math/bits" ) - // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf @@ -21,33 +20,31 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type MyPayload struct { - Val int32 `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Val int32 `protobuf:"varint,1,opt,name=val,proto3" json:"val,omitempty"` } func (m *MyPayload) Reset() { *m = MyPayload{} } func (m *MyPayload) String() string { return proto.CompactTextString(m) } func (*MyPayload) ProtoMessage() {} func (*MyPayload) Descriptor() ([]byte, []int) { - return fileDescriptor_unknown_a81ffa6ee32d62ad, []int{0} + return fileDescriptor_0af91db33915a9ab, []int{0} } func (m *MyPayload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *MyPayload) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } -func (dst *MyPayload) XXX_Merge(src proto.Message) { - xxx_messageInfo_MyPayload.Merge(dst, src) +func (m *MyPayload) XXX_Merge(src proto.Message) { + xxx_messageInfo_MyPayload.Merge(m, src) } func (m *MyPayload) XXX_Size() int { return m.Size() @@ -61,10 +58,27 @@ var xxx_messageInfo_MyPayload proto.InternalMessageInfo func init() { proto.RegisterType((*MyPayload)(nil), "cockroach.errors.markers.internal.MyPayload") } + +func init() { proto.RegisterFile("markers/internal/unknown.proto", fileDescriptor_0af91db33915a9ab) } + +var fileDescriptor_0af91db33915a9ab = []byte{ + // 154 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcb, 0x4d, 0x2c, 0xca, + 0x4e, 0x2d, 0x2a, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0xcd, 0xcb, + 0xce, 0xcb, 0x2f, 0xcf, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x52, 0x4c, 0xce, 0x4f, 0xce, + 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x4b, 0x2d, 0x2a, 0xca, 0x2f, 0x2a, 0xd6, 0x83, 0x6a, 0xd0, + 0x83, 0x69, 0x50, 0x92, 0xe5, 0xe2, 0xf4, 0xad, 0x0c, 0x48, 0xac, 0xcc, 0xc9, 0x4f, 0x4c, 0x11, + 0x12, 0xe0, 0x62, 0x2e, 0x4b, 0xcc, 0x91, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, 0x02, 0x31, 0x9d, + 0xb4, 0x4e, 0x3c, 0x94, 0x63, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x1b, 0x8f, + 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, + 0x8f, 0xe5, 0x18, 0xa2, 0x38, 0x60, 0x46, 0x25, 0xb1, 0x81, 0x2d, 0x35, 0x06, 0x04, 0x00, 0x00, + 0xff, 0xff, 0x85, 0x26, 0xa4, 0xd9, 0x96, 0x00, 0x00, 0x00, +} + func (m *MyPayload) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -72,26 +86,33 @@ func (m *MyPayload) Marshal() (dAtA []byte, err error) { } func (m *MyPayload) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MyPayload) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l if m.Val != 0 { - dAtA[i] = 0x8 - i++ i = encodeVarintUnknown(dAtA, i, uint64(m.Val)) + i-- + dAtA[i] = 0x8 } - return i, nil + return len(dAtA) - i, nil } func encodeVarintUnknown(dAtA []byte, offset int, v uint64) int { + offset -= sovUnknown(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *MyPayload) Size() (n int) { if m == nil { @@ -106,14 +127,7 @@ func (m *MyPayload) Size() (n int) { } func sovUnknown(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozUnknown(x uint64) (n int) { return sovUnknown(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -133,7 +147,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -161,7 +175,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Val |= (int32(b) & 0x7F) << shift + m.Val |= int32(b&0x7F) << shift if b < 0x80 { break } @@ -172,7 +186,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthUnknown } if (iNdEx + skippy) > l { @@ -190,6 +204,7 @@ func (m *MyPayload) Unmarshal(dAtA []byte) error { func skipUnknown(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -221,10 +236,8 @@ func skipUnknown(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -241,71 +254,34 @@ func skipUnknown(dAtA []byte) (n int, err error) { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthUnknown } - return iNdEx, nil + iNdEx += length case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowUnknown - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipUnknown(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupUnknown + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthUnknown + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthUnknown = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowUnknown = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthUnknown = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowUnknown = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupUnknown = fmt.Errorf("proto: unexpected end of group") ) - -func init() { - proto.RegisterFile("errors/markers/internal/unknown.proto", fileDescriptor_unknown_a81ffa6ee32d62ad) -} - -var fileDescriptor_unknown_a81ffa6ee32d62ad = []byte{ - // 149 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0x2d, 0x2a, 0xca, - 0x2f, 0x2a, 0xd6, 0xcf, 0x4d, 0x2c, 0xca, 0x4e, 0x2d, 0x2a, 0xd6, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, - 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0xcd, 0xcb, 0xce, 0xcb, 0x2f, 0xcf, 0xd3, 0x2b, 0x28, 0xca, 0x2f, - 0xc9, 0x17, 0x52, 0x4c, 0xce, 0x4f, 0xce, 0x2e, 0xca, 0x4f, 0x4c, 0xce, 0xd0, 0x83, 0x68, 0xd0, - 0x83, 0x6a, 0xd0, 0x83, 0x69, 0x50, 0x92, 0xe5, 0xe2, 0xf4, 0xad, 0x0c, 0x48, 0xac, 0xcc, 0xc9, - 0x4f, 0x4c, 0x11, 0x12, 0xe0, 0x62, 0x2e, 0x4b, 0xcc, 0x91, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, - 0x02, 0x31, 0x9d, 0x94, 0x4e, 0x3c, 0x94, 0x63, 0x38, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, - 0xc6, 0x1b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0x21, 0x8a, 0x03, - 0x66, 0x44, 0x12, 0x1b, 0xd8, 0x32, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x51, 0x57, - 0xfe, 0x95, 0x00, 0x00, 0x00, -} diff --git a/markers/markers.go b/markers/markers.go index b4a61ff..50a16e8 100644 --- a/markers/markers.go +++ b/markers/markers.go @@ -21,41 +21,93 @@ import ( "github.com/cockroachdb/errors/errbase" "github.com/cockroachdb/errors/errorspb" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) // Is determines whether one of the causes of the given error or any // of its causes is equivalent to some reference error. // +// As in the Go standard library, an error is considered to match a +// reference error if it is equal to that target or if it implements a +// method Is(error) bool such that Is(reference) returns true. +// +// Note: the inverse is not true - making an Is(reference) method +// return false does not imply that errors.Is() also returns +// false. Errors can be equal because their network equality marker is +// the same. To force errors to appear different to Is(), use +// errors.Mark(). +// // Note: if any of the error types has been migrated from a previous // package location or a different type, ensure that // RegisterTypeMigration() was called prior to Is(). func Is(err, reference error) bool { - if err == nil { - return err == reference + if reference == nil { + return err == nil } + isComparable := reflect.TypeOf(reference).Comparable() + // Direct reference comparison is the fastest, and most // likely to be true, so do this first. for c := err; c != nil; c = errbase.UnwrapOnce(c) { - if c == reference { + if isComparable && c == reference { return true } + // Compatibility with std go errors: if the error object itself + // implements Is(), try to use that. + if tryDelegateToIsMethod(c, reference) { + return true + } + + // Recursively try multi-error causes, if applicable. + for _, me := range errbase.UnwrapMulti(c) { + if Is(me, reference) { + return true + } + } } - // Not directly equal. Try harder, using error marks. We don't this - // during the loop above as it may be more expensive. - // - // Note: there is a more effective recursive algorithm that ensures - // that any pair of string only gets compared once. Should the - // following code become a performance bottleneck, that algorithm - // can be considered instead. - refMark := getMark(reference) - for c := err; c != nil; c = errbase.UnwrapOnce(c) { - if equalMarks(getMark(c), refMark) { + for errNext := err; errNext != nil; errNext = errbase.UnwrapOnce(errNext) { + if isMarkEqual(errNext, reference) { return true } } + + return false +} + +func isMarkEqual(err, reference error) bool { + _, errIsMark := err.(*withMark) + _, refIsMark := reference.(*withMark) + if errIsMark || refIsMark { + // If either error is a mark, use the more general + // equalMarks() function. + return equalMarks(getMark(err), getMark(reference)) + } + + m1 := err + m2 := reference + for m1 != nil && m2 != nil { + if !errbase.EqualTypeMark(m1, m2) { + return false + } + m1 = errbase.UnwrapOnce(m1) + m2 = errbase.UnwrapOnce(m2) + } + + // The two chains have different lengths, so they cannot be equal. + if m1 != nil || m2 != nil { + return false + } + + return safeGetErrMsg(err) == safeGetErrMsg(reference) +} + +func tryDelegateToIsMethod(err, reference error) bool { + if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(reference) { + return true + } return false } @@ -69,30 +121,29 @@ func HasType(err error, referenceType error) bool { return isType } -// IsType returns true if the outermost err object has a concrete type -// matching that of referenceType. -func IsType(err error, referenceType error) bool { - return reflect.TypeOf(err) == reflect.TypeOf(referenceType) -} - -// IsInterface returns true if err contains an error which implements the +// HasInterface returns true if err contains an error which implements the // interface pointed to by referenceInterface. The type of referenceInterface // must be a pointer to an interface type. If referenceInterface is not a // pointer to an interface, this function will panic. -func IsInterface(err error, referenceInterface interface{}) bool { - typ := reflect.TypeOf(referenceInterface) - if typ == nil || typ.Kind() != reflect.Ptr || typ.Elem().Kind() != reflect.Interface { - panic(fmt.Errorf("errors.IsInterface: referenceInterface must be a pointer to an interface, "+ - "found %T", referenceInterface)) - } - iface := typ.Elem() +func HasInterface(err error, referenceInterface interface{}) bool { + iface := getInterfaceType("HasInterface", referenceInterface) _, isType := If(err, func(err error) (interface{}, bool) { return nil, reflect.TypeOf(err).Implements(iface) }) return isType } -// If returns a predicate's return value the first time the predicate returns true. +func getInterfaceType(context string, referenceInterface interface{}) reflect.Type { + typ := reflect.TypeOf(referenceInterface) + if typ == nil || typ.Kind() != reflect.Ptr || typ.Elem().Kind() != reflect.Interface { + panic(fmt.Errorf("errors.%s: referenceInterface must be a pointer to an interface, "+ + "found %T", context, referenceInterface)) + } + return typ.Elem() +} + +// If iterates on the error's causal chain and returns a predicate's +// return value the first time the predicate returns true. // // Note: if any of the error types has been migrated from a previous // package location or a different type, ensure that @@ -112,30 +163,9 @@ func If(err error, pred func(err error) (interface{}, bool)) (interface{}, bool) // package location or a different type, ensure that // RegisterTypeMigration() was called prior to IsAny(). func IsAny(err error, references ...error) bool { - // First try using direct reference comparison. - for c := err; c != nil; c = errbase.UnwrapOnce(c) { - for _, refErr := range references { - if err == refErr { - return true - } - } - } - - // Try harder with marks. - // Note: there is a more effective recursive algorithm that ensures - // that any pair of string only gets compared once. Should this - // become a performance bottleneck, that algorithm can be considered - // instead. - refMarks := make([]errorMark, len(references)) - for i, refErr := range references { - refMarks[i] = getMark(refErr) - } - for c := err; c != nil; c = errbase.UnwrapOnce(c) { - errMark := getMark(err) - for _, refMark := range refMarks { - if equalMarks(errMark, refMark) { - return true - } + for _, reference := range references { + if Is(err, reference) { + return true } } return false @@ -151,6 +181,9 @@ func equalMarks(m1, m2 errorMark) bool { if m1.msg != m2.msg { return false } + if len(m1.types) != len(m2.types) { + return false + } for i, t := range m1.types { if !t.Equals(m2.types[i]) { return false @@ -164,13 +197,27 @@ func getMark(err error) errorMark { if m, ok := err.(*withMark); ok { return m.mark } - m := errorMark{msg: err.Error(), types: []errorspb.ErrorTypeMark{errbase.GetTypeMark(err)}} + m := errorMark{ + msg: safeGetErrMsg(err), + types: []errorspb.ErrorTypeMark{errbase.GetTypeMark(err)}, + } for c := errbase.UnwrapOnce(err); c != nil; c = errbase.UnwrapOnce(c) { m.types = append(m.types, errbase.GetTypeMark(c)) } return m } +// safeGetErrMsg extracts an error's Error() but tolerates panics. +func safeGetErrMsg(err error) (result string) { + defer func() { + if r := recover(); r != nil { + result = fmt.Sprintf("(%p).Error() panic: %v", err, r) + } + }() + result = err.Error() + return +} + // Mark creates an explicit mark for the given error, using // the same mark as some reference error. // @@ -193,7 +240,7 @@ type withMark struct { var _ error = (*withMark)(nil) var _ fmt.Formatter = (*withMark)(nil) -var _ errbase.Formatter = (*withMark)(nil) +var _ errbase.SafeFormatter = (*withMark)(nil) func (m *withMark) Error() string { return m.cause.Error() } func (m *withMark) Cause() error { return m.cause } @@ -201,13 +248,13 @@ func (m *withMark) Unwrap() error { return m.cause } func (m *withMark) Format(s fmt.State, verb rune) { errbase.FormatError(m, s, verb) } -func (m *withMark) FormatError(p errbase.Printer) error { - p.Print("forced error mark") +func (m *withMark) SafeFormatError(p errbase.Printer) error { if p.Detail() { + p.Printf("forced error mark\n") p.Printf("%q\n%s::%s", m.mark.msg, - m.mark.types[0].FamilyName, - m.mark.types[0].Extension, + redact.Safe(m.mark.types[0].FamilyName), + redact.Safe(m.mark.types[0].Extension), ) } return m.cause diff --git a/markers/markers_test.go b/markers/markers_test.go index 7177266..657c8d8 100644 --- a/markers/markers_test.go +++ b/markers/markers_test.go @@ -17,7 +17,6 @@ package markers_test import ( "context" "errors" - goErr "errors" "fmt" "io" "net" @@ -38,10 +37,14 @@ func TestLocalErrorEquivalence(t *testing.T) { err1 := errors.New("hello") err2 := errors.New("world") + var nilErr error tt.Check(!markers.Is(err1, err2)) tt.Check(markers.Is(err1, err1)) tt.Check(markers.Is(err2, err2)) + tt.Check(!markers.Is(err1, nilErr)) + tt.Check(markers.Is(nilErr, nilErr)) + tt.Check(!markers.Is(nilErr, err1)) } // This test demonstrates that Is() returns true if @@ -92,6 +95,7 @@ func TestRemoteErrorEquivalence(t *testing.T) { newErr1 := network(err1) tt.Check(markers.Is(err1, newErr1)) + tt.Check(markers.Is(newErr1, err1)) tt.Check(!markers.Is(err2, newErr1)) } @@ -106,9 +110,26 @@ func TestStandardErrorRemoteEquivalence(t *testing.T) { newErr1 := network(err1) tt.Check(markers.Is(err1, newErr1)) + tt.Check(markers.Is(newErr1, err1)) tt.Check(!markers.Is(err2, newErr1)) } +// This test demonstrates that it is possible to recognize standard +// errors that have been sent over the network. +func TestStandardFmtErrorRemoteEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := fmt.Errorf("hello") + err2 := fmt.Errorf("world") + + newErr1 := network(err1) + + tt.Check(markers.Is(err1, newErr1)) + tt.Check(markers.Is(newErr1, err1)) + tt.Check(!markers.Is(err2, newErr1)) + tt.Check(!markers.Is(newErr1, err2)) +} + // This test demonstrates that when the error library does not know // how to encode an error, it still knows that it is different from // other errors of different types, even though the message may be the @@ -158,6 +179,20 @@ func TestKnownErrorTypeDifference(t *testing.T) { tt.Check(!markers.Is(newErr1, newErr2)) } +func TestStandardFmtSingleWrapRemoteEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := fmt.Errorf("hello %w", errors.New("world")) + err2 := fmt.Errorf("hello %w", errors.New("earth")) + + newErr1 := network(err1) + + tt.Check(markers.Is(err1, newErr1)) + tt.Check(markers.Is(newErr1, err1)) + tt.Check(!markers.Is(err2, newErr1)) + tt.Check(!markers.Is(newErr1, err2)) +} + // This test demonstrates that two errors that are structurally // different can be made to become equivalent by using the same // marker. @@ -195,6 +230,160 @@ func TestWrappedEquivalence(t *testing.T) { tt.Check(markers.Is(err2w, err1)) } +// This test demonstrates that equivalence can be "peeked" through +// behind multiple layers of wrapping. +func TestGoErrWrappedEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := errors.New("hello") + err2 := fmt.Errorf("an error %w", err1) + + tt.Check(markers.Is(err2, err1)) + + m2 := errors.New("m2") + err2w := markers.Mark(err2, m2) + + tt.Check(markers.Is(err2w, m2)) +} + +// This test demonstrates that equivalence can be "peeked" through +// behind multiple layers of wrapping. +func TestGoMultiErrWrappedEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := errors.New("hello") + err2 := errors.New("world") + err3 := fmt.Errorf("an error %w and %w", err1, err2) + + tt.Check(markers.Is(err3, err1)) + tt.Check(markers.Is(err3, err2)) + + m3 := errors.New("m3") + err3w := markers.Mark(err3, m3) + + tt.Check(markers.Is(err3w, m3)) + + err4 := fmt.Errorf("error: %w", err3) + + tt.Check(markers.Is(err4, err1)) + tt.Check(markers.Is(err4, err2)) +} + +type myErr struct{ msg string } + +func (e *myErr) Error() string { + return e.msg +} + +// This test demonstrates that it is possible to recognize standard +// multierrors that have been sent over the network. +func TestStandardFmtMultierrorRemoteEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + err1 := fmt.Errorf("hello %w %w", errors.New("world"), errors.New("one")) + err2 := fmt.Errorf("hello %w %w", errors.New("world"), errors.New("two")) + + newErr1 := network(err1) + + tt.Check(markers.Is(err1, newErr1)) + tt.Check(markers.Is(newErr1, err1)) + tt.Check(!markers.Is(err2, newErr1)) + tt.Check(!markers.Is(newErr1, err2)) + + // Check multiple levels of causal nesting + err3 := fmt.Errorf("err: %w", errors.Join(err1, err2, &myErr{msg: "hi"})) + newErr3 := network(err3) + myErrV := &myErr{msg: "hi"} + + tt.Check(markers.Is(err3, newErr3)) + tt.Check(markers.Is(newErr3, err3)) + + tt.Check(markers.Is(err3, myErrV)) + tt.Check(markers.Is(newErr3, myErrV)) +} + +type myMultiError struct{ cause error } + +func (e myMultiError) Error() string { return e.cause.Error() } +func (e myMultiError) Unwrap() []error { return []error{e.cause} } + +type myOtherMultiError struct{ cause error } + +func (e myOtherMultiError) Error() string { return e.cause.Error() } +func (e myOtherMultiError) Unwrap() []error { return []error{e.cause} } + +func TestDifferentMultiErrorTypesCompareDifferentOverNetwork(t *testing.T) { + tt := testutils.T{T: t} + + base := errors.New("woo") + e1 := myMultiError{base} + e2 := myOtherMultiError{base} + + tt.Check(!markers.Is(e1, e2)) + + de1 := network(e1) + de2 := network(e2) + + tt.Check(!markers.Is(de1, de2)) +} + +// This test demonstrates that errors from the join +// and fmt constructors are properly considered as distinct. +func TestStandardFmtMultierrorRemoteRecursiveEquivalence(t *testing.T) { + tt := testutils.T{T: t} + + baseErr := errors.New("world") + err1 := fmt.Errorf("%w %w", baseErr, baseErr) + err2 := errors.Join(baseErr, baseErr) + + tt.Check(markers.Is(err1, baseErr)) + tt.Check(!markers.Is(err1, err2)) + tt.Check(!markers.Is(err2, err1)) + + newErr1 := network(err1) + newErr2 := network(err2) + + tt.Check(markers.Is(newErr1, baseErr)) + tt.Check(markers.Is(newErr2, baseErr)) + tt.Check(!markers.Is(newErr1, newErr2)) + tt.Check(!markers.Is(err1, newErr2)) + tt.Check(!markers.Is(err2, newErr1)) + tt.Check(!markers.Is(newErr2, err1)) + tt.Check(!markers.Is(newErr1, err2)) +} + +// This check verifies that IsAny() works. +func TestIsAny(t *testing.T) { + tt := testutils.T{T: t} + + err1 := errors.New("hello") + err2 := errors.New("world") + err3 := pkgErr.Wrap(err1, "world") + err4 := pkgErr.Wrap(err2, "universe") + err5 := errors.Join(err1, errors.New("gopher")) + err6 := errors.Join(errors.New("gopher"), err2) + err7 := errors.Join(err1, err2) + err8 := pkgErr.Wrap(err7, "gopher") + var nilErr error + + tt.Check(markers.IsAny(err1, err1)) + tt.Check(!markers.IsAny(err1, err2, err3, err4)) + tt.Check(markers.IsAny(err3, err1)) + tt.Check(markers.IsAny(err3, err3)) + tt.Check(markers.IsAny(err3, err2, err1)) + tt.Check(markers.IsAny(err3, err2, nilErr, err1)) + tt.Check(markers.IsAny(nilErr, err2, nilErr, err1)) + tt.Check(!markers.IsAny(nilErr, err2, err1)) + tt.Check(markers.IsAny(err5, err1)) + tt.Check(markers.IsAny(err6, err2)) + tt.Check(markers.IsAny(err7, err1)) + tt.Check(markers.IsAny(err7, err2)) + tt.Check(markers.IsAny(err7, err1, err2)) + tt.Check(markers.IsAny(err8, err1)) + tt.Check(markers.IsAny(err8, err2)) + tt.Check(markers.IsAny(err8, err1, err2)) +} + // This test demonstrates that two errors that are structurally // equivalent can be made to become non-equivalent through markers.Is() // by using markers. @@ -255,9 +444,7 @@ func TestHasType(t *testing.T) { tt.Check(!markers.HasType(wrapped, nil)) tt.Check(markers.HasType(base, (*testError)(nil))) - tt.Check(markers.IsType(base, (*testError)(nil))) tt.Check(markers.HasType(wrapped, (*testError)(nil))) - tt.Check(!markers.IsType(wrapped, (*testError)(nil))) // nil errors don't contain any types, not even nil. tt.Check(!markers.HasType(nil, nil)) @@ -274,11 +461,14 @@ func TestIsInterface(t *testing.T) { base := &testError{msg: "hmm"} wrapped := pkgErr.Wrap(base, "boom") - tt.Check(markers.IsInterface(base, (*testErrorInterface)(nil))) - tt.Check(markers.IsInterface(wrapped, (*testErrorInterface)(nil))) + tt.Check(markers.HasInterface(base, (*testErrorInterface)(nil))) + tt.Check(markers.HasInterface(wrapped, (*testErrorInterface)(nil))) - tt.Check(!markers.IsInterface(base, (*net.Error)(nil))) - tt.Check(!markers.IsInterface(wrapped, (*net.Error)(nil))) + tt.Check(!markers.HasInterface(base, (*net.Error)(nil))) + tt.Check(!markers.HasInterface(wrapped, (*net.Error)(nil))) + + // nil errors don't contain any interfaces, not even nil. + tt.Check(!markers.HasInterface(nil, (*net.Error)(nil))) } // This test is used in the RFC. @@ -442,7 +632,7 @@ func (e *myErrType2) Error() string { return e.msg } func TestFormat(t *testing.T) { tt := testutils.T{t} - refErr := goErr.New("foo") + refErr := errors.New("foo") const woo = `woo` const waawoo = `waa: woo` testCases := []struct { @@ -452,7 +642,7 @@ func TestFormat(t *testing.T) { expFmtVerbose string }{ {"marked", - markers.Mark(goErr.New("woo"), refErr), + markers.Mark(errors.New("woo"), refErr), woo, ` woo (1) forced error mark @@ -462,7 +652,7 @@ Wraps: (2) woo Error types: (1) *markers.withMark (2) *errors.errorString`}, {"marked + wrapper", - markers.Mark(&werrFmt{goErr.New("woo"), "waa"}, refErr), + markers.Mark(&werrFmt{errors.New("woo"), "waa"}, refErr), waawoo, ` waa: woo (1) forced error mark @@ -475,7 +665,7 @@ Wraps: (3) woo Error types: (1) *markers.withMark (2) *markers_test.werrFmt (3) *errors.errorString`}, {"wrapper + marked", - &werrFmt{markers.Mark(goErr.New("woo"), refErr), "waa"}, + &werrFmt{markers.Mark(errors.New("woo"), refErr), "waa"}, waawoo, ` waa: woo (1) waa @@ -527,3 +717,89 @@ func (e *werrFmt) FormatError(p errbase.Printer) error { } return e.cause } + +func TestInvalidError(t *testing.T) { + tt := testutils.T{T: t} + + err := &invalidError{} + errRef := errors.New("hello") + tt.Check(!markers.Is(err, errRef)) + tt.Check(markers.Is(err, err)) + tt.Check(markers.HasType(err, (*invalidError)(nil))) +} + +type invalidError struct { + emptyRef error +} + +func (e *invalidError) Error() string { return e.emptyRef.Error() } +func (e *invalidError) Cause() error { return e.emptyRef } + +func TestDelegateToIsMethod(t *testing.T) { + tt := testutils.T{T: t} + + efoo := &errWithIs{msg: "foo", secret: "foo"} + efoo2 := &errWithIs{msg: "foo", secret: "bar"} + ebar := &errWithIs{msg: "bar", secret: "foo"} + + tt.Check(markers.Is(efoo, efoo2)) // equality based on message + tt.Check(markers.Is(efoo, ebar)) // equality based on method + tt.Check(!markers.Is(efoo2, ebar)) // neither msg nor method + + tt.Check(markers.IsAny(efoo, efoo2, ebar)) + tt.Check(markers.IsAny(efoo2, ebar, efoo)) + tt.Check(!markers.IsAny(efoo2, ebar, errors.New("other"))) +} + +type errWithIs struct { + msg string + secret string +} + +func (e *errWithIs) Error() string { return e.msg } + +func (e *errWithIs) Is(o error) bool { + if ex, ok := o.(*errWithIs); ok { + return e.secret == ex.secret + } + return false +} + +func TestCompareUncomparable(t *testing.T) { + tt := testutils.T{T: t} + + err1 := errors.New("hello") + var nilErr error + f := []string{"woo"} + tt.Check(markers.Is(errorUncomparable{f}, errorUncomparable{})) + tt.Check(markers.IsAny(errorUncomparable{f}, errorUncomparable{})) + tt.Check(markers.IsAny(errorUncomparable{f}, nilErr, errorUncomparable{})) + tt.Check(!markers.Is(errorUncomparable{f}, &errorUncomparable{})) + tt.Check(!markers.IsAny(errorUncomparable{f}, &errorUncomparable{})) + tt.Check(!markers.IsAny(errorUncomparable{f}, nilErr, &errorUncomparable{})) + tt.Check(markers.Is(&errorUncomparable{f}, errorUncomparable{})) + tt.Check(markers.IsAny(&errorUncomparable{f}, errorUncomparable{})) + tt.Check(markers.IsAny(&errorUncomparable{f}, nilErr, errorUncomparable{})) + tt.Check(!markers.Is(&errorUncomparable{f}, &errorUncomparable{})) + tt.Check(!markers.IsAny(&errorUncomparable{f}, &errorUncomparable{})) + tt.Check(!markers.IsAny(&errorUncomparable{f}, nilErr, &errorUncomparable{})) + tt.Check(!markers.Is(errorUncomparable{f}, err1)) + tt.Check(!markers.IsAny(errorUncomparable{f}, err1)) + tt.Check(!markers.IsAny(errorUncomparable{f}, nilErr, err1)) + tt.Check(!markers.Is(&errorUncomparable{f}, err1)) + tt.Check(!markers.IsAny(&errorUncomparable{f}, err1)) + tt.Check(!markers.IsAny(&errorUncomparable{f}, nilErr, err1)) +} + +type errorUncomparable struct { + f []string +} + +func (e errorUncomparable) Error() string { + return fmt.Sprintf("uncomparable error %d", len(e.f)) +} + +func (errorUncomparable) Is(target error) bool { + _, ok := target.(errorUncomparable) + return ok +} diff --git a/markers_api.go b/markers_api.go index ee6027f..dffc1f6 100644 --- a/markers_api.go +++ b/markers_api.go @@ -16,27 +16,57 @@ package errors import "github.com/cockroachdb/errors/markers" -// Is forwards a definition. +// Is determines whether one of the causes of the given error or any +// of its causes is equivalent to some reference error. +// +// As in the Go standard library, an error is considered to match a +// reference error if it is equal to that target or if it implements a +// method Is(error) bool such that Is(reference) returns true. +// +// Note: the inverse is not true - making an Is(reference) method +// return false does not imply that errors.Is() also returns +// false. Errors can be equal because their network equality marker is +// the same. To force errors to appear different to Is(), use +// errors.Mark(). +// +// Note: if any of the error types has been migrated from a previous +// package location or a different type, ensure that +// RegisterTypeMigration() was called prior to Is(). func Is(err, reference error) bool { return markers.Is(err, reference) } -// IsType forwards a definition. -func IsType(err, referenceType error) bool { return markers.IsType(err, referenceType) } - -// HasType forwards a definition. +// HasType returns true iff err contains an error whose concrete type +// matches that of referenceType. func HasType(err, referenceType error) bool { return markers.HasType(err, referenceType) } -// IsInterface forwards a definition. -func IsInterface(err error, referenceInterface interface{}) bool { - return markers.IsInterface(err, referenceInterface) +// HasInterface returns true if err contains an error which implements the +// interface pointed to by referenceInterface. The type of referenceInterface +// must be a pointer to an interface type. If referenceInterface is not a +// pointer to an interface, this function will panic. +func HasInterface(err error, referenceInterface interface{}) bool { + return markers.HasInterface(err, referenceInterface) } -// If forwards a definition. +// If iterates on the error's causal chain and returns a predicate's +// return value the first time the predicate returns true. +// +// Note: if any of the error types has been migrated from a previous +// package location or a different type, ensure that +// RegisterTypeMigration() was called prior to If(). func If(err error, pred func(err error) (interface{}, bool)) (interface{}, bool) { return markers.If(err, pred) } -// IsAny forwards a definition. +// IsAny is like Is except that multiple references are compared. +// +// Note: if any of the error types has been migrated from a previous +// package location or a different type, ensure that +// RegisterTypeMigration() was called prior to IsAny(). func IsAny(err error, references ...error) bool { return markers.IsAny(err, references...) } -// Mark forwards a definition. +// Mark creates an explicit mark for the given error, using +// the same mark as some reference error. +// +// Note: if any of the error types has been migrated from a previous +// package location or a different type, ensure that +// RegisterTypeMigration() was called prior to Mark(). func Mark(err error, reference error) error { return markers.Mark(err, reference) } diff --git a/oserror/oserror.go b/oserror/oserror.go new file mode 100644 index 0000000..cc29537 --- /dev/null +++ b/oserror/oserror.go @@ -0,0 +1,120 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package oserror + +import ( + "os" + + "github.com/cockroachdb/errors" + "github.com/cockroachdb/errors/errbase" +) + +// Portable analogs of some common system call errors. +// +// Errors returned from this package may be tested against these errors +// with errors.Is. +var ( + ErrInvalid = os.ErrInvalid + ErrPermission = os.ErrPermission + ErrExist = os.ErrExist + ErrNotExist = os.ErrNotExist + ErrClosed = os.ErrClosed +) + +// IsPermission returns a boolean indicating whether the error is +// known to report that permission is denied. It is satisfied by +// ErrPermission as well as some syscall errors. +// +// This function differs from os.IsPermission() in that it +// can identify an error through wrapping layers. +func IsPermission(err error) bool { + // errors.Is() is not able to peek through os.SyscallError, + // whereas os.IsPermission() can. Conversely, os.IsPermission() + // cannot peek through Unwrap, whereas errors.Is() can. So we + // need to try both. + if errors.Is(err, ErrPermission) || os.IsPermission(errors.UnwrapAll(err)) { + return true + } + // If a syscall errno representing ErrPermission was encoded on a + // different platform, and decoded here, then it will show up as + // neither a syscall errno here nor an ErrPermission; instead it + // shows up as an OpaqueErrno. We test this here. + if o := (*errbase.OpaqueErrno)(nil); errors.As(err, &o) { + return o.Is(ErrPermission) + } + return false +} + +// IsExist returns a boolean indicating whether the error is known to report +// that a file or directory already exists. It is satisfied by ErrExist as +// well as some syscall errors. +// +// This function differs from os.IsExist() in that it +// can identify an error through wrapping layers. +func IsExist(err error) bool { + // errors.Is() is not able to peek through os.SyscallError, + // whereas os.IsExist() can. Conversely, os.IsExist() + // cannot peek through Unwrap, whereas errors.Is() can. So we + // need to try both. + if errors.Is(err, ErrExist) || os.IsExist(errors.UnwrapAll(err)) { + return true + } + // If a syscall errno representing ErrExist was encoded on a + // different platform, and decoded here, then it will show up as + // neither a syscall errno here nor an ErrExist; instead it + // shows up as an OpaqueErrno. We test this here. + if o := (*errbase.OpaqueErrno)(nil); errors.As(err, &o) { + return o.Is(ErrExist) + } + return false +} + +// IsNotExist returns a boolean indicating whether the error is known to +// report that a file or directory does not exist. It is satisfied by +// ErrNotExist as well as some syscall errors. +// +// This function differs from os.IsNotExist() in that it +// can identify an error through wrapping layers. +func IsNotExist(err error) bool { + // errors.Is() is not able to peek through os.SyscallError, + // whereas os.IsNotExist() can. Conversely, os.IsNotExist() + // cannot peek through Unwrap, whereas errors.Is() can. So we + // need to try both. + if errors.Is(err, ErrNotExist) || os.IsNotExist(errors.UnwrapAll(err)) { + return true + } + // If a syscall errno representing ErrNotExist was encoded on a + // different platform, and decoded here, then it will show up as + // neither a syscall errno here nor an ErrNotExist; instead it + // shows up as an OpaqueErrno. We test this here. + if o := (*errbase.OpaqueErrno)(nil); errors.As(err, &o) { + return o.Is(ErrNotExist) + } + return false +} + +// IsTimeout returns a boolean indicating whether the error is known +// to report that a timeout occurred. +// +// This function differs from os.IsTimeout() in that it +// can identify an error through wrapping layers. +func IsTimeout(err error) bool { + // os.IsTimeout() cannot peek through Unwrap. We need errors.If() + // for that. + _, ok := errors.If(err, func(err error) (interface{}, bool) { + return nil, os.IsTimeout(err) + }) + return ok +} diff --git a/oserror/oserror_test.go b/oserror/oserror_test.go new file mode 100644 index 0000000..028cc39 --- /dev/null +++ b/oserror/oserror_test.go @@ -0,0 +1,37 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package oserror + +import ( + "os" + "testing" + + "github.com/cockroachdb/errors" + "github.com/cockroachdb/errors/testutils" +) + +func TestErrorPredicates(t *testing.T) { + tt := testutils.T{T: t} + + tt.Check(IsPermission(errors.Wrap(os.ErrPermission, "woo"))) + tt.Check(IsExist(errors.Wrap(os.ErrExist, "woo"))) + tt.Check(IsNotExist(errors.Wrap(os.ErrNotExist, "woo"))) + tt.Check(IsTimeout(errors.Wrap(&myTimeout{}, "woo"))) +} + +type myTimeout struct{} + +func (t *myTimeout) Error() string { return "timeout" } +func (t *myTimeout) Timeout() bool { return true } diff --git a/oserror/oserror_unix_test.go b/oserror/oserror_unix_test.go new file mode 100644 index 0000000..c04890c --- /dev/null +++ b/oserror/oserror_unix_test.go @@ -0,0 +1,34 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris + +package oserror + +import ( + "syscall" + "testing" + + "github.com/cockroachdb/errors" + "github.com/cockroachdb/errors/testutils" +) + +func TestErrorPredicatesUnix(t *testing.T) { + tt := testutils.T{T: t} + + tt.Check(IsPermission(errors.Wrap(syscall.EACCES, "woo"))) + tt.Check(IsExist(errors.Wrap(syscall.ENOTEMPTY, "woo"))) + tt.Check(IsNotExist(errors.Wrap(syscall.ENOENT, "woo"))) + tt.Check(IsTimeout(errors.Wrap(syscall.EAGAIN, "woo"))) +} diff --git a/report/report.go b/report/report.go index 1565d99..817583d 100644 --- a/report/report.go +++ b/report/report.go @@ -15,167 +15,349 @@ package report import ( - "bytes" "fmt" "strings" "github.com/cockroachdb/errors/domains" "github.com/cockroachdb/errors/errbase" "github.com/cockroachdb/errors/withstack" - "github.com/cockroachdb/sentry-go" + "github.com/cockroachdb/redact" + sentry "github.com/getsentry/sentry-go" ) // BuildSentryReport builds the components of a sentry report. This // can be used instead of ReportError() below to use additional custom // conditions in the reporting or add additional reporting tags. +// +// The Sentry Event is populated for maximal utility when exploited in +// the Sentry.io web interface and database. +// +// A Sentry report is displayed visually in the Sentry UI as follows: +// +// ////////////// +// Title: (1) some prefix in bold (2) one line for a stack trace +// (3) a single-line subtitle +// +// (4) the tags, as a tag soup (concatenated in a single paragraph, +// unsorted) +// +// (5) a "message" +// +// (6) zero or more "exceptions", each composed of: +// +// (7) a bold title +// (8) some freeform text +// (9) a stack trace +// +// (10) metadata fields: environment, arch, etc +// +// (11) "Additional data" fields +// +// (12) SDK version +// /////////////// +// +// These visual items map to the Sentry Event object as follows: +// +// (1) the Type field of the 1st Exception object, if any +// +// otherwise the Message field +// +// (2) the topmost entry from the Stacktrace field of the 1st Exception object, if any +// (3) the Value field of the 1st Exception object, if any, unwrapped as a single line +// (4) the Tags field +// (5) the Message field +// (7) the Type field (same as (1) for 1st exception) +// (8) the Value field (same as (3) for 1st exception) +// (9) the Stacktrace field (input to (2) on 1st exception) +// (10) the other fields on the Event object +// (11) the Extra field +// +// (Note how the top-level title fields (1) (3) are unrelated to the +// Message field in the event, which is surprising!) +// +// Given this mapping, an error object is decomposed as follows: +// +// (1)/(7): : () +// (3)/(8): first line of verbose error printout +// (4): not populated in this function, caller is to manage this +// (5): detailed structure of the entire error object, with references to +// +// additional "exception" objects +// +// (9): generated from innermost stack trace +// (6): every exception object after the 1st reports additional stack trace contexts +// (11): the detailed error types and their error mark. +// +// If there is no stack trace in the error, a synthetic Exception +// object is still produced to provide visual detail in the Sentry UI. +// +// Note that if a layer in the error has both a stack trace (ie +// provides the `StackTrace()` interface) and also safe details +// (`SafeDetails()`) other than the stack trace, only the stack trace +// is included in the Sentry report. This does not affect error types +// provided by the library, but could impact error types defined by +// 3rd parties. This limitation may be lifted in a later version. func BuildSentryReport(err error) (event *sentry.Event, extraDetails map[string]interface{}) { if err == nil { // No error: do nothing. return } + // First step is to collect the details. var stacks []*withstack.ReportableStackTrace var details []errbase.SafeDetailPayload - // Peel the error. - for c := err; c != nil; c = errbase.UnwrapOnce(c) { + visitAllMulti(err, func(c error) { st := withstack.GetReportableStackTrace(c) stacks = append(stacks, st) sd := errbase.GetSafeDetails(c) details = append(details, sd) + }) + module := string(domains.GetDomain(err)) + + // firstDetailLine is the first detail string encountered. + // This is added as decoration to the first Exception + // payload (either from the error object or synthetic) + // so as to populate the Sentry report title. + var firstDetailLine string + + // longMsgBuf will become the Message field, which contains the full + // structure of the error. + var longMsgBuf strings.Builder + if f, l, _, ok := withstack.GetOneLineSource(err); ok { + fmt.Fprintf(&longMsgBuf, "%s:%d: ", f, l) } + // Include the verbose error printout, with sensitive bits redacted out. + verboseErr := redact.Sprintf("%+v", err).Redact().StripMarkers() + if verboseErr != redactedMarker { + idx := strings.IndexByte(verboseErr, '\n') + if idx == -1 { + firstDetailLine = verboseErr + } else { + firstDetailLine = verboseErr[:idx] + } + } + fmt.Fprint(&longMsgBuf, verboseErr) - // A report can contain at most one "message", any number of - // "exceptions", and arbitrarily many "extra" fields. - // - // So we populate the event as follow: - // - the "message" will contain the type of the first error - // - the "exceptions" will contain the details with - // populated encoded exceptions field. - // - the "extra" will contain all the encoded stack traces - // or safe detail arrays. - - var firstError *string - var exceptions []*withstack.ReportableStackTrace + // sep is used to separate the entries in the longMsgBuf / Message + // payload. + sep := "" + + // extras will become the per-layer "Additional data" fields. extras := make(map[string]interface{}) - var longMsgBuf bytes.Buffer - var typesBuf bytes.Buffer + // extraNum counts the number of "Additional data" payloads and is + // used to generate the cross-reference counters in the Message + // payload. extraNum := 1 - sep := "" - for i := len(details) - 1; i >= 0; i-- { - longMsgBuf.WriteString(sep) - sep = "\n" - // Collect the type name. - tn := details[i].OriginalTypeName + // typesBuf will become the payload for the "error types" Additional + // data field. It explains the Go types of the layers in the error + // object. + var typesBuf strings.Builder + + // exceptions accumulates the Exception payloads. + var exceptions []sentry.Exception + + // leafErrorType is the type name of the leaf error. + // This is used as fallback when no Exception payload is generated. + var leafErrorType string + + // Iterate from the last (innermost) to first (outermost) error + // layer. We iterate in this order because we want to describe the + // error from innermost to outermost layer in longMsgBuf and + // typesBuf. + longMsgBuf.WriteString("\n-- report composition:\n") + for i := len(details) - 1; i >= 0; i-- { + // Collect the type name for this layer of error wrapping, towards + // the "error types" additional data field. + fullTypeName := details[i].OriginalTypeName mark := details[i].ErrorTypeMark fm := "*" - if tn != mark.FamilyName { + if fullTypeName != mark.FamilyName { + // fullTypeName can be different from the family when an error type has + // been renamed or moved. fm = mark.FamilyName } - fmt.Fprintf(&typesBuf, "%s (%s::%s)\n", tn, fm, mark.Extension) + fmt.Fprintf(&typesBuf, "%s (%s::%s)\n", fullTypeName, fm, mark.Extension) + shortTypename := lastPathComponent(fullTypeName) + if i == len(details)-1 { + leafErrorType = shortTypename + } - // Compose the message for this layer. The message consists of: + // Compose the Message line for this layer. + // + // The message line consists of: // - optionally, a file/line reference, if a stack trace was available. // - the error/wrapper type name, with file prefix removed. // - optionally, the first line of the first detail string, if one is available. // - optionally, references to stack trace / details. + + // If not at the first layer, separate from the previous layer + // with a newline character. + longMsgBuf.WriteString(sep) + sep = "\n" + // Add a file:lineno prefix, if there's a stack trace entry with + // that info. + var file, fn string + var lineno int if stacks[i] != nil && len(stacks[i].Frames) > 0 { f := stacks[i].Frames[len(stacks[i].Frames)-1] - fn := f.Filename - if j := strings.LastIndexByte(fn, '/'); j >= 0 { - fn = fn[j+1:] - } - fmt.Fprintf(&longMsgBuf, "%s:%d: ", fn, f.Lineno) + file = lastPathComponent(f.Filename) + fn = f.Function + lineno = f.Lineno + fmt.Fprintf(&longMsgBuf, "%s:%d: ", file, f.Lineno) } + longMsgBuf.WriteString(shortTypename) - longMsgBuf.WriteString(simpleErrType(tn)) - - var genExtra bool + // Now decide what kind of payload we want to add to the Event + // object. // Is there a stack trace? if st := stacks[i]; st != nil { - // Yes: generate the extra and list it on the line. - stKey := fmt.Sprintf("%d: stacktrace", extraNum) - extras[stKey] = PrintStackTrace(st) - fmt.Fprintf(&longMsgBuf, " (%d)", extraNum) - extraNum++ + var excType strings.Builder + if file != "" { + fmt.Fprintf(&excType, "%s:%d ", file, lineno) + } + if fn != "" { + fmt.Fprintf(&excType, "(%s)", fn) + } + if excType.Len() == 0 { + excType.WriteString("") + } + exc := sentry.Exception{ + Module: module, + Stacktrace: st, + Type: excType.String(), + Value: shortTypename, + } + + // Refer to the exception payload in the Message field. + // + // We only add a numeric counter for every exception *after* the + // first one. This is because the 1st exception payload is + // special, it is used as report title for Sentry and we don't + // want to pollute that title with a counter. + if len(exceptions) == 0 { + longMsgBuf.WriteString(" (top exception)") + } else { + counterStr := fmt.Sprintf("(%d)", extraNum) + extraNum++ + exc.Type = counterStr + " " + exc.Type + fmt.Fprintf(&longMsgBuf, " %s", counterStr) + } - exceptions = append(exceptions, st) + exceptions = append(exceptions, exc) } else { - // No: are there details? If so, print them. - // Note: we only print the details if no stack trace - // was found that that level. This is because - // stack trace annotations also produce the stack - // trace as safe detail string. - genExtra = len(details[i].SafeDetails) > 1 + // No stack trace. + // Are there safe details? If so, print the first safe detail + // string (we're assuming that all the important bits will + // also be included in the verbose printout, so there's no + // need to dig out more safe strings here.) + // + // TODO(knz): the SafeDetails API is not really meant for Sentry + // reporting. Once we have more experience to prove that the + // verbose printout is sufficient, we can remove the SafeDetails + // from sentry reports. + // + // Note: we only print the details if no stack trace was found + // at that level. This is because stack trace annotations also + // produce the stack trace as safe detail string. if len(details[i].SafeDetails) > 0 { d := details[i].SafeDetails[0] - if d != "" { - genExtra = true - } if j := strings.IndexByte(d, '\n'); j >= 0 { d = d[:j] } if d != "" { longMsgBuf.WriteString(": ") longMsgBuf.WriteString(d) - if firstError == nil { + if firstDetailLine == "" { // Keep the string for later. - firstError = &d + firstDetailLine = d } } } } - - // Are we generating another extra for the safe detail strings? - if genExtra { - stKey := fmt.Sprintf("%d: details", extraNum) - var extraStr bytes.Buffer - for _, d := range details[i].SafeDetails { - fmt.Fprintln(&extraStr, d) - } - extras[stKey] = extraStr.String() - fmt.Fprintf(&longMsgBuf, " (%d)", extraNum) - extraNum++ - } } - // Determine a head message for the report. - headMsg := "" - if firstError != nil { - headMsg = *firstError - } - // Prepend the "main" source line information if available/found. - if file, line, fn, ok := withstack.GetOneLineSource(err); ok { - headMsg = fmt.Sprintf("%s:%d: %s: %s", file, line, fn, headMsg) + if extraNum > 1 { + // Make the message part more informational. + longMsgBuf.WriteString("\n(check the extra data payloads)") } + // Produce the full error type description. extras["error types"] = typesBuf.String() - // Make the message part more informational. - longMsgBuf.WriteString("\n(check the extra data payloads)") - extras["long message"] = longMsgBuf.String() + // Sentry is mightily annoying. + reverseExceptionOrder(exceptions) + // Start assembling the event. event = sentry.NewEvent() - event.Message = headMsg - - module := domains.GetDomain(err) - for _, exception := range exceptions { - event.Exception = append(event.Exception, - sentry.Exception{ - Type: "", - Module: string(module), - Stacktrace: exception, - }) + event.Message = longMsgBuf.String() + event.Exception = exceptions + + // If there is no exception payload, synthesize one. + if len(event.Exception) == 0 { + // We know we don't have a stack trace to extract line/function + // info from (if we had, we'd have an Exception payload at that + // point). Instead, we make a best effort using bits and pieces + // assembled so far. + event.Exception = append(event.Exception, sentry.Exception{ + Module: module, + Type: leafErrorType, + Value: firstDetailLine, + }) + } else { + // We have at least one exception payload already. In that case, + // decorate the first exception with the first detail line if + // there is one. This enhances the title of the Sentry report. + // + // This goes from: + // (func) + // + // + // to: + // (func) + // wrapped [: ] + // via + // if wrapped; or if leaf: + // (func) + // [: ] + + var newValueBuf strings.Builder + // Note that "first exception" is the last item in the slice, + // because... Sentry is annoying. + firstExc := &event.Exception[len(event.Exception)-1] + // Add the leaf error type if different from the type at this + // level (this is going to be the common case, unless using + // pkg/errors.WithStack). + wrapped := false + if firstExc.Value == leafErrorType { + newValueBuf.WriteString(firstExc.Value) + } else { + newValueBuf.WriteString(leafErrorType) + wrapped = true + } + // Add the detail info line, if any. + if firstDetailLine != "" { + fmt.Fprintf(&newValueBuf, ": %s", firstDetailLine) + } + if wrapped { + fmt.Fprintf(&newValueBuf, "\nvia %s", firstExc.Value) + } + firstExc.Value = newValueBuf.String() } return event, extras } +var redactedMarker = redact.RedactableString(redact.RedactedMarker()).StripMarkers() + // ReportError reports the given error to Sentry. The caller is responsible for -// checking whether telemetry is enabled. +// checking whether telemetry is enabled, and calling the sentry.Flush() +// function to wait for the report to be uploaded. (By default, +// Sentry submits reports asynchronously.) +// // Note: an empty 'eventID' can be returned which signifies that the error was // not reported. This can occur when Sentry client hasn't been properly // configured or Sentry client decided to not report the error (due to @@ -196,7 +378,7 @@ func ReportError(err error) (eventID string) { "report_type": "error", } for key, value := range tags { - event.Tags[key] = tags[value] + event.Tags[key] = value } res := sentry.CaptureEvent(event) @@ -206,10 +388,26 @@ func ReportError(err error) (eventID string) { return } -func simpleErrType(tn string) string { +func lastPathComponent(tn string) string { // Strip the path prefix. if i := strings.LastIndexByte(tn, '/'); i >= 0 { tn = tn[i+1:] } return tn } + +func reverseExceptionOrder(ex []sentry.Exception) { + for i := 0; i < len(ex)/2; i++ { + ex[i], ex[len(ex)-i-1] = ex[len(ex)-i-1], ex[i] + } +} + +func visitAllMulti(err error, f func(error)) { + f(err) + if e := errbase.UnwrapOnce(err); e != nil { + visitAllMulti(e, f) + } + for _, e := range errbase.UnwrapMulti(err) { + visitAllMulti(e, f) + } +} diff --git a/report/report_test.go b/report/report_test.go index 409654c..0ff3017 100644 --- a/report/report_test.go +++ b/report/report_test.go @@ -27,10 +27,31 @@ import ( "github.com/cockroachdb/errors/safedetails" "github.com/cockroachdb/errors/testutils" "github.com/cockroachdb/errors/withstack" - "github.com/cockroachdb/sentry-go" + sentry "github.com/getsentry/sentry-go" "github.com/kr/pretty" ) +// func TestReport2(t *testing.T) { +// client, err := sentry.NewClient( +// sentry.ClientOptions{ +// Debug: true, +// Dsn: "", +// }) +// if err != nil { +// t.Fatal(err) +// } +// sentry.CurrentHub().BindClient(client) +// +// myErr := errutil.Newf("Hello %s %d", "world", redact.Safe(123)) +// myErr = errutil.Wrapf(myErr, "some prefix %s", "unseen") +// myErr = errutil.NewAssertionErrorWithWrappedErrf(myErr, "assert %s %s", redact.Safe("safe"), "unsafe") +// +// if eventID := report.ReportError(myErr); eventID == "" { +// t.Fatal("eventID is empty") +// } +// sentry.Flush(2 * time.Second) +// } + func TestReport(t *testing.T) { var events []*sentry.Event @@ -53,7 +74,8 @@ func TestReport(t *testing.T) { thisDomain := domains.NamedDomain("thisdomain") err = goErr.New("hello") - err = safedetails.WithSafeDetails(err, "universe %d", safedetails.Safe(123)) + err = safedetails.WithSafeDetails(err, "universe %d %s", + safedetails.Safe(123), safedetails.Safe("multi\nline")) err = withstack.WithStack(err) err = domains.WithDomain(err, thisDomain) defer errbase.TestingWithEmptyMigrationRegistry()() @@ -71,8 +93,30 @@ func TestReport(t *testing.T) { tt.Assert(len(events) == 1) e := events[0] - tt.Run("valid short message", func(tt testutils.T) { - tt.CheckRegexpEqual(e.Message, `report_test.go:\d+: TestReport: universe %d`) + tt.Run("long message payload", func(tt testutils.T) { + expectedLongMessage := `^ +report_test.go:\d+: × +\(1\) +Wraps: \(2\) error domain: \"thisdomain\" +Wraps: \(3\) attached stack trace + -- stack trace: + | github.com/cockroachdb/errors/report_test.TestReport + | \t[^:]*report/report_test.go:\d+ + | testing.tRunner + | \t.*src/testing/testing.go:\d+ + | runtime.goexit + | \t[^:]*:\d+ +Wraps: \(4\) universe 123 multi + | line +Wraps: \(5\) × +Error types: \(1\) *report_test.myWrapper \(2\) *domains.withDomain \(3\) *withstack.withStack \(4\) *safedetails.withSafeDetails \(5\) *errors.errorString +-- report composition: +*errors.errorString +*safedetails.withSafeDetails: universe 123 multi +report_test.go:82: *withstack.withStack \(top exception\) +*domains.withDomain: error domain: \"thisdomain\" +*report_test.myWrapper$` + tt.CheckRegexpEqual(e.Message, expectedLongMessage) }) tt.Run("valid extra details", func(tt testutils.T) { @@ -84,28 +128,10 @@ github.com/cockroachdb/errors/report_test/*report_test.myWrapper (some/previous/ ` types := fmt.Sprintf("%s", e.Extra["error types"]) tt.CheckEqual(types, expectedTypes) - - expectedDetail := "universe %d\n-- arg 1: 123" - detail := fmt.Sprintf("%s", e.Extra["1: details"]) - tt.CheckEqual(strings.TrimSpace(detail), expectedDetail) - - expectedDetail = string(thisDomain) - detail = fmt.Sprintf("%s", e.Extra["3: details"]) - tt.CheckEqual(strings.TrimSpace(detail), expectedDetail) }) hasStack := false - tt.Run("long message payload", func(tt testutils.T) { - expectedLongMessage := `^\*errors.errorString -\*safedetails.withSafeDetails: universe %d \(1\) -report_test.go:\d+: \*withstack.withStack \(2\) -\*domains\.withDomain: error domain: "thisdomain" \(3\) -\*report_test\.myWrapper -\(check the extra data payloads\)$` - tt.CheckRegexpEqual(e.Extra["long message"].(string), expectedLongMessage) - }) - for _, exc := range e.Exception { tt.Check(!hasStack) diff --git a/report/reportables.go b/report/reportables.go index 43060f0..1795c05 100644 --- a/report/reportables.go +++ b/report/reportables.go @@ -18,7 +18,7 @@ import ( "bytes" "fmt" - "github.com/cockroachdb/sentry-go" + "github.com/getsentry/sentry-go" ) // StackTrace is an object suitable for inclusion in errors that can diff --git a/report_api.go b/report_api.go index 2e4d60f..1ac7e67 100644 --- a/report_api.go +++ b/report_api.go @@ -16,13 +16,88 @@ package errors import ( "github.com/cockroachdb/errors/report" - "github.com/cockroachdb/sentry-go" + "github.com/getsentry/sentry-go" ) -// BuildSentryReport forwards a definition. +// BuildSentryReport builds the components of a sentry report. This +// can be used instead of ReportError() below to use additional custom +// conditions in the reporting or add additional reporting tags. +// +// The Sentry Event is populated for maximal utility when exploited in +// the Sentry.io web interface and database. +// +// A Sentry report is displayed visually in the Sentry UI as follows: +// +//////////////// +// Title: (1) some prefix in bold (2) one line for a stack trace +// (3) a single-line subtitle +// +// (4) the tags, as a tag soup (concatenated in a single paragraph, +// unsorted) +// +// (5) a "message" +// +// (6) zero or more "exceptions", each composed of: +// (7) a bold title +// (8) some freeform text +// (9) a stack trace +// +// (10) metadata fields: environment, arch, etc +// +// (11) "Additional data" fields +// +// (12) SDK version +///////////////// +// +// These visual items map to the Sentry Event object as follows: +// +// (1) the Type field of the 1st Exception object, if any +// otherwise the Message field +// (2) the topmost entry from the Stacktrace field of the 1st Exception object, if any +// (3) the Value field of the 1st Exception object, if any, unwrapped as a single line +// (4) the Tags field +// (5) the Message field +// (7) the Type field (same as (1) for 1st exception) +// (8) the Value field (same as (3) for 1st exception) +// (9) the Stacktrace field (input to (2) on 1st exception) +// (10) the other fields on the Event object +// (11) the Extra field +// +// (Note how the top-level title fields (1) (3) are unrelated to the +// Message field in the event, which is surprising!) +// +// Given this mapping, an error object is decomposed as follows: +// +// (1)/(7): : () +// (3)/(8): : +// (4): not populated in this function, caller is to manage this +// (5): detailed structure of the entire error object, with references to "additional data" +// and additional "exception" objects +// (9): generated from innermost stack trace +// (6): every exception object after the 1st reports additional stack trace contexts +// (11): "additional data" populated from safe detail payloads +// +// If there is no stack trace in the error, a synthetic Exception +// object is still produced to provide visual detail in the Sentry UI. +// +// Note that if a layer in the error has both a stack trace (ie +// provides the `StackTrace()` interface) and also safe details +// (`SafeDetails()`) other than the stack trace, only the stack trace +// is included in the Sentry report. This does not affect error types +// provided by the library, but could impact error types defined by +// 3rd parties. This limitation may be lifted in a later version. +// func BuildSentryReport(err error) (*sentry.Event, map[string]interface{}) { return report.BuildSentryReport(err) } -// ReportError forwards a definition. +// ReportError reports the given error to Sentry. The caller is responsible for +// checking whether telemetry is enabled, and calling the sentry.Flush() +// function to wait for the report to be uploaded. (By default, +// Sentry submits reports asynchronously.) +// +// Note: an empty 'eventID' can be returned which signifies that the error was +// not reported. This can occur when Sentry client hasn't been properly +// configured or Sentry client decided to not report the error (due to +// configured sampling rate, callbacks, Sentry's event processors, etc). func ReportError(err error) string { return report.ReportError(err) } diff --git a/safedetails/redact.go b/safedetails/redact.go index 70d82d9..d9ce8b6 100644 --- a/safedetails/redact.go +++ b/safedetails/redact.go @@ -14,124 +14,12 @@ package safedetails -import ( - "context" - "fmt" - "net" - "os" - "runtime" - "strings" - "syscall" - - "github.com/cockroachdb/errors/errbase" - "github.com/cockroachdb/errors/markers" - "github.com/cockroachdb/errors/withstack" -) +import "github.com/cockroachdb/redact" // Redact returns a redacted version of the supplied item that is safe to use in // anonymized reporting. +// +// NB: this interface is obsolete. Use redact.Sprint() directly. func Redact(r interface{}) string { - var buf strings.Builder - - switch t := r.(type) { - case SafeMessager: - buf.WriteString(t.SafeMessage()) - case error: - redactErr(&buf, t) - default: - typAnd(&buf, r, "") - } - - return buf.String() -} - -func redactErr(buf *strings.Builder, err error) { - if c := errbase.UnwrapOnce(err); c == nil { - // This is a leaf error. Decode the leaf and return. - if file, line, _, ok := withstack.GetOneLineSource(err); ok { - fmt.Fprintf(buf, "%s:%d: ", file, line) - } - redactLeafErr(buf, err) - } else /* c != nil */ { - // Print the inner error before the outer error. - redactErr(buf, c) - redactWrapper(buf, err) - } - - // Add any additional safe strings from the wrapper, if present. - if payload := errbase.GetSafeDetails(err); len(payload.SafeDetails) > 0 { - buf.WriteString("\n(more details:)") - for _, sd := range payload.SafeDetails { - buf.WriteByte('\n') - buf.WriteString(strings.TrimSpace(sd)) - } - } -} - -func redactWrapper(buf *strings.Builder, err error) { - buf.WriteString("\nwrapper: ") - switch t := err.(type) { - case *os.SyscallError: - typAnd(buf, t, t.Syscall) - case *os.PathError: - typAnd(buf, t, t.Op) - case *os.LinkError: - fmt.Fprintf(buf, "%T: %s %s %s", t, t.Op, t.Old, t.New) - case *net.OpError: - typAnd(buf, t, t.Op) - if t.Net != "" { - fmt.Fprintf(buf, " %s", t.Net) - } - if t.Source != nil { - buf.WriteString("") - } - if t.Addr != nil { - if t.Source != nil { - buf.WriteString("->") - } - buf.WriteString("") - } - default: - typAnd(buf, err, "") - } -} - -func redactLeafErr(buf *strings.Builder, err error) { - // Is it a sentinel error? These are safe. - if markers.IsAny(err, - context.DeadlineExceeded, - context.Canceled, - os.ErrInvalid, - os.ErrPermission, - os.ErrExist, - os.ErrNotExist, - os.ErrClosed, - os.ErrNoDeadline, - ) { - typAnd(buf, err, err.Error()) - return - } - - if redactPre113Wrappers(buf, err) { - return - } - - // The following two types are safe too. - switch t := err.(type) { - case runtime.Error: - typAnd(buf, t, t.Error()) - case syscall.Errno: - typAnd(buf, t, t.Error()) - default: - // No further information about this error, simply report its type. - typAnd(buf, err, "") - } -} - -func typAnd(buf *strings.Builder, r interface{}, msg string) { - if msg == "" { - fmt.Fprintf(buf, "<%T>", r) - } else { - fmt.Fprintf(buf, "%T: %s", r, msg) - } + return redact.Sprint(r).Redact().StripMarkers() } diff --git a/safedetails/redact_go112.go b/safedetails/redact_go112.go deleted file mode 100644 index fca1e24..0000000 --- a/safedetails/redact_go112.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2019 The Cockroach Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. - -// +build !go1.13 - -package safedetails - -import ( - "net" - "os" - "strings" -) - -func redactPre113Wrappers(buf *strings.Builder, err error) bool { - // The following cases are needed for go 1.12 and previous - // versions. Go 1.13 instances of these errors will be recognized - // by the unwrapping performed in redactErr(). - switch t := err.(type) { - case *os.SyscallError: - redactErr(buf, t.Err) - redactWrapper(buf, err) - return true - case *os.PathError: - redactErr(buf, t.Err) - redactWrapper(buf, err) - return true - case *net.OpError: - redactErr(buf, t.Err) - redactWrapper(buf, err) - return true - case *os.LinkError: - redactErr(buf, t.Err) - redactWrapper(buf, err) - return true - } - return false -} diff --git a/safedetails/redact_test.go b/safedetails/redact_test.go new file mode 100644 index 0000000..a659aa8 --- /dev/null +++ b/safedetails/redact_test.go @@ -0,0 +1,136 @@ +// Copyright 2020 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package safedetails_test + +import ( + "context" + "errors" + "net" + "os" + "regexp" + "runtime" + "testing" + + "github.com/cockroachdb/errors/safedetails" + "github.com/cockroachdb/errors/testutils" + "github.com/cockroachdb/redact" +) + +func TestRedact(t *testing.T) { + errSentinel := (error)(struct{ error }{}) + + // rm is what's left over after redaction. + rm := string(redact.RedactableBytes(redact.RedactedMarker()).StripMarkers()) + + testData := []struct { + obj interface{} + expected string + }{ + // Redacting non-error values. + + {123, rm}, + {"secret", rm}, + + // Redacting SafeMessagers. + + {mySafer{}, `hello`}, + + {safedetails.Safe(123), `123`}, + + {mySafeError{}, `hello`}, + + {&werrFmt{mySafeError{}, "unseen"}, rm + `: hello`}, + + // Redacting errors. + + // Unspecial cases, get redacted. + {errors.New("secret"), rm}, + + // Special cases, unredacted. + {os.ErrInvalid, `invalid argument`}, + {os.ErrPermission, `permission denied`}, + {os.ErrExist, `file already exists`}, + {os.ErrNotExist, `file does not exist`}, + {os.ErrClosed, `file already closed`}, + {os.ErrNoDeadline, `file type does not support deadline`}, + + {context.Canceled, `context canceled`}, + {context.DeadlineExceeded, `context deadline exceeded`}, + + {makeTypeAssertionErr(), `interface conversion: interface {} is nil, not int`}, + + {errSentinel, // explodes if Error() called + `%!v(PANIC=SafeFormatter method: runtime error: invalid memory address or nil pointer dereference)`}, + + {&werrFmt{&werrFmt{os.ErrClosed, "unseen"}, "unsung"}, + rm + `: ` + rm + `: file already closed`}, + + // Special cases, get partly redacted. + + {os.NewSyscallError("rename", os.ErrNotExist), + `rename: file does not exist`}, + + {&os.PathError{Op: "rename", Path: "secret", Err: os.ErrNotExist}, + `rename ` + rm + `: file does not exist`}, + + {&os.LinkError{ + Op: "moo", + Old: "sec", + New: "cret", + Err: os.ErrNotExist, + }, + `moo ` + rm + ` ` + rm + `: file does not exist`}, + + {&net.OpError{ + Op: "write", + Net: "tcp", + Source: &net.IPAddr{IP: net.IP("sensitive-source")}, + Addr: &net.IPAddr{IP: net.IP("sensitive-addr")}, + Err: errors.New("not safe"), + }, `write tcp ` + rm + ` -> ` + rm + `: ` + rm}, + } + + tt := testutils.T{T: t} + + for _, tc := range testData { + s := safedetails.Redact(tc.obj) + s = fileref.ReplaceAllString(s, "...path...") + + tt.CheckStringEqual(s, tc.expected) + } +} + +var fileref = regexp.MustCompile(`([a-zA-Z0-9\._/@-]*\.(?:go|s):\d+)`) + +// makeTypeAssertionErr returns a runtime.Error with the message: +// interface conversion: interface {} is nil, not int +func makeTypeAssertionErr() (result runtime.Error) { + defer func() { + e := recover() + result = e.(runtime.Error) + }() + var x interface{} + _ = x.(int) + return nil +} + +type mySafer struct{} + +func (mySafer) SafeMessage() string { return "hello" } + +type mySafeError struct{} + +func (mySafeError) SafeMessage() string { return "hello" } +func (mySafeError) Error() string { return "helloerr" } diff --git a/safedetails/safedetails.go b/safedetails/safedetails.go index b3cd354..bf60350 100644 --- a/safedetails/safedetails.go +++ b/safedetails/safedetails.go @@ -14,7 +14,11 @@ package safedetails -import "fmt" +import ( + "reflect" + + "github.com/cockroachdb/redact" +) // WithSafeDetails annotates an error with the given reportable details. // The format is made available as a PII-free string, alongside @@ -22,6 +26,9 @@ import "fmt" // Arguments can be reported as-is (without redaction) by wrapping // them using the Safe() function. // +// If the format is empty and there are no arguments, the +// error argument is returned unchanged. +// // Detail is shown: // - via `errors.GetSafeDetails()` // - when formatting with `%+v`. @@ -30,53 +37,28 @@ func WithSafeDetails(err error, format string, args ...interface{}) error { if err == nil { return nil } - - details := make([]string, 1, 1+len(args)) - details[0] = format - for i, a := range args { - details = append(details, fmt.Sprintf("-- arg %d: %s", i+1, Redact(a))) + if len(format) == 0 && len(args) == 0 { + return err + } + details := []string{ + redact.Sprintf(format, args...).Redact().StripMarkers(), } return &withSafeDetails{cause: err, safeDetails: details} } -// SafeMessager is implemented by objects which have a way of representing -// themselves suitably redacted for anonymized reporting. -type SafeMessager interface { - SafeMessage() string -} +var refSafeType = reflect.TypeOf(redact.Safe("")) + +// SafeMessager is implemented by objects which have a way of +// representing themselves suitably redacted for anonymized reporting. +// +// NB: this interface is obsolete. Use redact.SafeFormatter instead. +type SafeMessager = redact.SafeMessager // Safe wraps the given object into an opaque struct that implements // SafeMessager: its contents can be included as-is in PII-free // strings in error objects and reports. -func Safe(v interface{}) SafeMessager { - return safeType{V: v} -} - -// A safeType panic can be reported verbatim, i.e. does not leak -// information. A nil `*safeType` is not valid for use and may cause -// panics. -type safeType struct { - V interface{} -} - -var _ SafeMessager = safeType{} - -// SafeMessage implements SafeMessager. -func (st safeType) SafeMessage() string { - return fmt.Sprintf("%+v", st.V) -} - -// safeType implements fmt.Stringer as a convenience. -func (st safeType) String() string { - return st.SafeMessage() -} - -// Format implements fmt.Formatter. -func (st safeType) Format(s fmt.State, verb rune) { - flags := "" - if s.Flag('+') { - flags += "+" - } - fmtString := fmt.Sprintf("%%%s%c", flags, verb) - fmt.Fprintf(s, fmtString, st.V) +// +// NB: this is obsolete. Use redact.Safe instead. +func Safe(v interface{}) redact.SafeValue { + return redact.Safe(v) } diff --git a/safedetails/safedetails_test.go b/safedetails/safedetails_test.go index 893826d..1d17697 100644 --- a/safedetails/safedetails_test.go +++ b/safedetails/safedetails_test.go @@ -23,15 +23,18 @@ import ( "testing" "github.com/cockroachdb/errors/errbase" + _ "github.com/cockroachdb/errors/errutil" "github.com/cockroachdb/errors/markers" "github.com/cockroachdb/errors/safedetails" "github.com/cockroachdb/errors/testutils" + "github.com/cockroachdb/redact" ) func TestDetailCapture(t *testing.T) { origErr := errors.New("hello world") - err := safedetails.WithSafeDetails(origErr, "bye %s %s", safedetails.Safe("planet"), "and universe") + err := safedetails.WithSafeDetails(origErr, + "bye %s %s", safedetails.Safe("planet"), "and universe") t.Logf("here's the error:\n%+v", err) @@ -47,11 +50,7 @@ func TestDetailCapture(t *testing.T) { // The detail strings are hidden. errV := fmt.Sprintf("%+v", err) tt.Check(!strings.Contains(errV, "and universe")) - tt.Check(!strings.Contains(errV, "planet")) - tt.Check(!strings.Contains(errV, "bye %s %s")) - - // The fact there are details is preserved. - tt.Check(strings.Contains(errV, "3 safe details enclosed")) + tt.Check(strings.Contains(errV, "bye planet")) } // Check the error properties locally. @@ -74,6 +73,9 @@ func TestFormat(t *testing.T) { baseErr := errors.New("woo") const woo = `woo` const waawoo = `waa: woo` + // rm is what's left over after redaction. + rm := string(redact.RedactableBytes(redact.RedactedMarker()).StripMarkers()) + testCases := []struct { name string err error @@ -85,46 +87,43 @@ func TestFormat(t *testing.T) { safedetails.WithSafeDetails(baseErr, "a"), woo, ` woo -(1) 1 safe detail enclosed +(1) a Wraps: (2) woo Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, // Payload `payload 0 -(0) a + (0) a payload 1 -(empty) + (empty) `}, {"safe empty", safedetails.WithSafeDetails(baseErr, ""), woo, ` woo -(1) 1 safe detail enclosed -Wraps: (2) woo -Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, +(1) woo +Error types: (1) *errors.errorString`, // Payload `payload 0 -(empty) -payload 1 -(empty) + (empty) `}, {"safe nofmt+onearg", - safedetails.WithSafeDetails(baseErr, "", 123), + safedetails.WithSafeDetails(baseErr, "%v", 123), woo, ` woo -(1) 2 safe details enclosed +(1) ` + rm + ` Wraps: (2) woo Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, // Payload `payload 0 -(1) -- arg 1: + (0) ` + rm + ` payload 1 -(empty) + (empty) `}, {"safe err", - safedetails.WithSafeDetails(baseErr, "a %v", + safedetails.WithSafeDetails(baseErr, "prefix: %v", &os.PathError{ Op: "open", Path: "/hidden", @@ -132,53 +131,47 @@ payload 1 }), woo, ` woo -(1) 2 safe details enclosed +(1) prefix: open ` + rm + `: file does not exist Wraps: (2) woo Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, // Payload `payload 0 -(0) a %v -(1) -- arg 1: *errors.errorString: file does not exist -wrapper: *os.PathError: open + (0) prefix: open ` + rm + `: file does not exist payload 1 -(empty) + (empty) `}, {"safe", safedetails.WithSafeDetails(baseErr, "a %s %s", "b", safedetails.Safe("c")), woo, ` woo -(1) 3 safe details enclosed +(1) a ` + rm + ` c Wraps: (2) woo Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, // Payload `payload 0 -(0) a %s %s -(1) -- arg 1: -(2) -- arg 2: c + (0) a ` + rm + ` c payload 1 -(empty) + (empty) `}, {"safe + wrapper", safedetails.WithSafeDetails(&werrFmt{baseErr, "waa"}, "a %s %s", "b", safedetails.Safe("c")), waawoo, ` waa: woo -(1) 3 safe details enclosed +(1) a ` + rm + ` c Wraps: (2) waa | -- this is waa's - | multi-line payload + | multi-line safe payload Wraps: (3) woo Error types: (1) *safedetails.withSafeDetails (2) *safedetails_test.werrFmt (3) *errors.errorString`, // Payload `payload 0 -(0) a %s %s -(1) -- arg 1: -(2) -- arg 2: c + (0) a ` + rm + ` c payload 1 -(empty) + (empty) payload 2 -(empty) + (empty) `}, {"wrapper + safe", @@ -187,19 +180,17 @@ payload 2 waa: woo (1) waa | -- this is waa's - | multi-line payload -Wraps: (2) 3 safe details enclosed + | multi-line safe payload +Wraps: (2) a ` + rm + ` c Wraps: (3) woo Error types: (1) *safedetails_test.werrFmt (2) *safedetails.withSafeDetails (3) *errors.errorString`, // Payload `payload 0 -(empty) + (empty) payload 1 -(0) a %s %s -(1) -- arg 1: -(2) -- arg 2: c + (0) a ` + rm + ` c payload 2 -(empty) + (empty) `}, {"safe with wrapped error", @@ -208,16 +199,14 @@ payload 2 woo, ` woo -(1) 2 safe details enclosed +(1) a ` + rm + `: ` + rm + ` Wraps: (2) woo Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, // Payload `payload 0 -(0) a %v -(1) -- arg 1: <*errors.errorString> -wrapper: <*safedetails_test.werrFmt> + (0) a ` + rm + `: ` + rm + ` payload 1 -(empty) + (empty) `}, {"safe + safe, stacked", @@ -227,41 +216,37 @@ payload 1 woo, ` woo -(1) 2 safe details enclosed -Wraps: (2) 2 safe details enclosed +(1) delicious coffee +Wraps: (2) hello world Wraps: (3) woo Error types: (1) *safedetails.withSafeDetails (2) *safedetails.withSafeDetails (3) *errors.errorString`, // Payload `payload 0 -(0) delicious %s -(1) -- arg 1: coffee + (0) delicious coffee payload 1 -(0) hello %s -(1) -- arg 1: world + (0) hello world payload 2 -(empty) + (empty) `}, {"safe as arg to safe", safedetails.WithSafeDetails(baseErr, "a %v", - safedetails.WithSafeDetails(errors.New("wuu"), - "b %v", safedetails.Safe("waa"))), + /* this error is an argument */ + safedetails.WithSafeDetails( + errors.New("wuu"), + "b %v\nmulti line", + safedetails.Safe("waa\nmulti line"))), woo, ` woo -(1) 2 safe details enclosed +(1) a ` + rm + ` Wraps: (2) woo Error types: (1) *safedetails.withSafeDetails (2) *errors.errorString`, // Payload `payload 0 -(0) a %v -(1) -- arg 1: <*errors.errorString> -wrapper: <*safedetails.withSafeDetails> -(more details:) -b %v --- arg 1: waa + (0) a ` + rm + ` payload 1 -(empty) + (empty) `}, } @@ -281,7 +266,7 @@ payload 1 // %+v is the verbose mode. refV := strings.TrimPrefix(test.expFmtVerbose, "\n") - spv := fmt.Sprintf("%+v", err) + spv := fmt.Sprintf("%+v", errbase.Formattable(err)) tt.CheckStringEqual(spv, refV) // Check the actual details produced. @@ -290,14 +275,14 @@ payload 1 for i, d := range details { fmt.Fprintf(&buf, "payload %d\n", i) if len(d.SafeDetails) == 0 || (len(d.SafeDetails) == 1 && d.SafeDetails[0] == "") { - fmt.Fprintf(&buf, "(empty)\n") + fmt.Fprintf(&buf, " (empty)\n") continue } for j, sd := range d.SafeDetails { if len(sd) == 0 { continue } - fmt.Fprintf(&buf, "(%d) %s\n", j, sd) + fmt.Fprintf(&buf, " (%d) %s\n", j, strings.ReplaceAll(sd, "\n", "\n ")) } } tt.CheckStringEqual(buf.String(), test.details) @@ -310,15 +295,15 @@ type werrFmt struct { msg string } -var _ errbase.Formatter = (*werrFmt)(nil) +var _ errbase.SafeFormatter = (*werrFmt)(nil) func (e *werrFmt) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } func (e *werrFmt) Unwrap() error { return e.cause } func (e *werrFmt) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *werrFmt) FormatError(p errbase.Printer) error { +func (e *werrFmt) SafeFormatError(p errbase.Printer) error { p.Print(e.msg) if p.Detail() { - p.Printf("-- this is %s's\nmulti-line payload", e.msg) + p.Printf("-- this is %s's\nmulti-line safe payload", e.msg) } return e.cause } diff --git a/safedetails/with_safedetails.go b/safedetails/with_safedetails.go index 84f1e95..03ba7e5 100644 --- a/safedetails/with_safedetails.go +++ b/safedetails/with_safedetails.go @@ -19,6 +19,7 @@ import ( "fmt" "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) @@ -33,16 +34,30 @@ func (e *withSafeDetails) SafeDetails() []string { } var _ fmt.Formatter = (*withSafeDetails)(nil) +var _ errbase.SafeFormatter = (*withSafeDetails)(nil) // Printing a withSecondary reveals the details. func (e *withSafeDetails) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *withSafeDetails) FormatError(p errbase.Printer) error { - plural := "s" - if len(e.safeDetails) == 1 { - plural = "" +// SafeFormatError implements errbase.SafeFormatter. +func (e *withSafeDetails) SafeFormatError(p errbase.Printer) error { + if p.Detail() { + comma := redact.SafeString("") + if len(e.safeDetails) != 1 { + plural := redact.SafeString("s") + if len(e.safeDetails) == 1 { + plural = "" + } + p.Printf("%d safe detail%s enclosed", redact.Safe(len(e.safeDetails)), plural) + comma = "\n" + } + // We hide the details from %+v; they are included + // during Sentry reporting. + for _, s := range e.safeDetails { + p.Printf("%s%s", comma, redact.Safe(s)) + comma = "\n" + } } - p.Printf("%d safe detail%s enclosed", len(e.safeDetails), plural) return e.cause } diff --git a/safedetails_api.go b/safedetails_api.go index e4c0ee1..4caac9d 100644 --- a/safedetails_api.go +++ b/safedetails_api.go @@ -14,19 +14,43 @@ package errors -import "github.com/cockroachdb/errors/safedetails" +import ( + "github.com/cockroachdb/errors/safedetails" + "github.com/cockroachdb/redact" +) -// WithSafeDetails forwards a definition. +// WithSafeDetails annotates an error with the given reportable details. +// The format is made available as a PII-free string, alongside +// with a PII-free representation of every additional argument. +// Arguments can be reported as-is (without redaction) by wrapping +// them using the Safe() function. +// +// If the format is empty and there are no arguments, the +// error argument is returned unchanged. +// +// Detail is shown: +// - via `errors.GetSafeDetails()` +// - when formatting with `%+v`. +// - in Sentry reports. func WithSafeDetails(err error, format string, args ...interface{}) error { return safedetails.WithSafeDetails(err, format, args...) } -// SafeMessager forwards a definition. -type SafeMessager = safedetails.SafeMessager +// SafeMessager aliases redact.SafeMessager. +// +// NB: this is obsolete. Use redact.SafeFormatter or +// errors.SafeFormatter instead. +type SafeMessager = redact.SafeMessager -// Safe forwards a definition. -func Safe(v interface{}) SafeMessager { return safedetails.Safe(v) } +// Safe wraps the given object into an opaque struct that implements +// SafeMessager: its contents can be included as-is in PII-free +// strings in error objects and reports. +// +// NB: this is obsolete. Use redact.Safe instead. +func Safe(v interface{}) redact.SafeValue { return safedetails.Safe(v) } -// Redact returns a redacted version of the supplied item that is safe -// to use in anonymized reporting. +// Redact returns a redacted version of the supplied item that is safe to use in +// anonymized reporting. +// +// NB: this interface is obsolete. Use redact.Sprint() directly. func Redact(r interface{}) string { return safedetails.Redact(r) } diff --git a/secondary/with_secondary.go b/secondary/with_secondary.go index 56ac8fe..5822b2c 100644 --- a/secondary/with_secondary.go +++ b/secondary/with_secondary.go @@ -33,7 +33,7 @@ type withSecondaryError struct { var _ error = (*withSecondaryError)(nil) var _ errbase.SafeDetailer = (*withSecondaryError)(nil) var _ fmt.Formatter = (*withSecondaryError)(nil) -var _ errbase.Formatter = (*withSecondaryError)(nil) +var _ errbase.SafeFormatter = (*withSecondaryError)(nil) // SafeDetails reports the PII-free details from the secondary error. func (e *withSecondaryError) SafeDetails() []string { @@ -48,10 +48,9 @@ func (e *withSecondaryError) SafeDetails() []string { // Printing a withSecondary reveals the details. func (e *withSecondaryError) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *withSecondaryError) FormatError(p errbase.Printer) (next error) { - p.Print("secondary error attachment") +func (e *withSecondaryError) SafeFormatError(p errbase.Printer) (next error) { if p.Detail() { - p.Printf("%+v", e.secondaryError) + p.Printf("secondary error attachment\n%+v", e.secondaryError) } return e.cause } diff --git a/secondary_api.go b/secondary_api.go index 3b74d9a..2f5e34f 100644 --- a/secondary_api.go +++ b/secondary_api.go @@ -16,12 +16,27 @@ package errors import "github.com/cockroachdb/errors/secondary" -// WithSecondaryError forwards a definition. +// WithSecondaryError enhances the error given as first argument with +// an annotation that carries the error given as second argument. The +// second error does not participate in cause analysis (Is, etc) and +// is only revealed when printing out the error or collecting safe +// (PII-free) details for reporting. +// +// If additionalErr is nil, the first error is returned as-is. +// +// Tip: consider using CombineErrors() below in the general case. +// +// Detail is shown: +// - via `errors.GetSafeDetails()`, shows details from secondary error. +// - when formatting with `%+v`. +// - in Sentry reports. func WithSecondaryError(err error, additionalErr error) error { return secondary.WithSecondaryError(err, additionalErr) } -// CombineErrors forwards a definition. +// CombineErrors returns err, or, if err is nil, otherErr. +// if err is non-nil, otherErr is attached as secondary error. +// See the documentation of `WithSecondaryError()` for details. func CombineErrors(err, otherErr error) error { return secondary.CombineErrors(err, otherErr) } diff --git a/telemetrykeys/with_telemetry.go b/telemetrykeys/with_telemetry.go index 291d499..d495329 100644 --- a/telemetrykeys/with_telemetry.go +++ b/telemetrykeys/with_telemetry.go @@ -17,8 +17,10 @@ package telemetrykeys import ( "context" "fmt" + "strings" "github.com/cockroachdb/errors/errbase" + "github.com/cockroachdb/redact" "github.com/gogo/protobuf/proto" ) @@ -30,7 +32,7 @@ type withTelemetry struct { var _ error = (*withTelemetry)(nil) var _ errbase.SafeDetailer = (*withTelemetry)(nil) var _ fmt.Formatter = (*withTelemetry)(nil) -var _ errbase.Formatter = (*withTelemetry)(nil) +var _ errbase.SafeFormatter = (*withTelemetry)(nil) func (w *withTelemetry) Error() string { return w.cause.Error() } func (w *withTelemetry) Cause() error { return w.cause } @@ -40,8 +42,10 @@ func (w *withTelemetry) SafeDetails() []string { return w.keys } func (w *withTelemetry) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *withTelemetry) FormatError(p errbase.Printer) (next error) { - p.Printf("keys: %+v", w.keys) +func (w *withTelemetry) SafeFormatError(p errbase.Printer) (next error) { + if p.Detail() { + p.Printf("keys: [%s]", redact.Safe(strings.Join(w.keys, " "))) + } return w.cause } diff --git a/telemetrykeys_api.go b/telemetrykeys_api.go index 0ccb615..145d9b9 100644 --- a/telemetrykeys_api.go +++ b/telemetrykeys_api.go @@ -16,8 +16,17 @@ package errors import "github.com/cockroachdb/errors/telemetrykeys" -// WithTelemetry forwards a definition. +// WithTelemetry annotates err with the given telemetry key(s). +// The telemetry keys must be PII-free. +// +// Detail is shown: +// - via `errors.GetSafeDetails()`. +// - via `GetTelemetryKeys()` below. +// - when formatting with `%+v`. +// - in Sentry reports. func WithTelemetry(err error, keys ...string) error { return telemetrykeys.WithTelemetry(err, keys...) } -// GetTelemetryKeys forwards a definition. +// GetTelemetryKeys retrieves the (de-duplicated) set of +// all telemetry keys present in the direct causal chain +// of the error. The keys may not be sorted. func GetTelemetryKeys(err error) []string { return telemetrykeys.GetTelemetryKeys(err) } diff --git a/testutils/simplecheck.go b/testutils/simplecheck.go index 413b8be..ff83f2c 100644 --- a/testutils/simplecheck.go +++ b/testutils/simplecheck.go @@ -17,7 +17,7 @@ package testutils import ( "bytes" "fmt" - "io/ioutil" + "os" "reflect" "regexp" "runtime" @@ -127,6 +127,13 @@ func (t *T) CheckEqual(val, ref interface{}) { } } +func (t *T) CheckContains(s, substr string) { + t.Helper() + if !strings.Contains(s, substr) { + t.failWithf(false, "value does not contain substring\n got: %s\\nexpected: %s", s, substr) + } +} + // CheckEqual checks that the string value is equal to some reference. func (t *T) CheckStringEqual(val, ref string) { t.Helper() @@ -205,7 +212,7 @@ func fileContext(filename string, line, context int) ([][]byte, int) { defer fileCacheLock.Unlock() lines, ok := fileCache[filename] if !ok { - data, err := ioutil.ReadFile(filename) + data, err := os.ReadFile(filename) if err != nil { // cache errors as nil slice: code below handles it correctly // otherwise when missing the source or running as a different user, we try diff --git a/withstack/reportable.go b/withstack/reportable.go index 19577ae..f3ff87e 100644 --- a/withstack/reportable.go +++ b/withstack/reportable.go @@ -23,7 +23,7 @@ import ( "strings" "github.com/cockroachdb/errors/errbase" - "github.com/cockroachdb/sentry-go" + "github.com/getsentry/sentry-go" pkgErr "github.com/pkg/errors" ) diff --git a/withstack/withstack.go b/withstack/withstack.go index 2fd3329..56f5d68 100644 --- a/withstack/withstack.go +++ b/withstack/withstack.go @@ -58,7 +58,7 @@ type withStack struct { var _ error = (*withStack)(nil) var _ fmt.Formatter = (*withStack)(nil) -var _ errbase.Formatter = (*withStack)(nil) +var _ errbase.SafeFormatter = (*withStack)(nil) var _ errbase.SafeDetailer = (*withStack)(nil) func (w *withStack) Error() string { return w.cause.Error() } @@ -68,13 +68,17 @@ func (w *withStack) Unwrap() error { return w.cause } // Format implements the fmt.Formatter interface. func (w *withStack) Format(s fmt.State, verb rune) { errbase.FormatError(w, s, verb) } -func (w *withStack) FormatError(p errbase.Printer) error { - p.Print("attached stack trace") +// SafeFormatError implements the errbase.SafeFormatter interface. +func (w *withStack) SafeFormatError(p errbase.Printer) error { + if p.Detail() { + p.Printf("attached stack trace") + } // We do not print the stack trace ourselves - errbase.FormatError() // does this for us. return w.cause } +// SafeDetails implements the errbase.SafeDetailer interface. func (w *withStack) SafeDetails() []string { return []string{fmt.Sprintf("%+v", w.StackTrace())} } diff --git a/withstack/withstack_test.go b/withstack/withstack_test.go deleted file mode 100644 index 9cfcd1a..0000000 --- a/withstack/withstack_test.go +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright 2019 The Cockroach Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. See the License for the specific language governing -// permissions and limitations under the License. - -package withstack_test - -import ( - "context" - "errors" - goErr "errors" - "fmt" - "regexp" - "strings" - "testing" - - "github.com/cockroachdb/errors/errbase" - "github.com/cockroachdb/errors/markers" - "github.com/cockroachdb/errors/testutils" - "github.com/cockroachdb/errors/withstack" - "github.com/kr/pretty" -) - -func TestWithStack(t *testing.T) { - tt := testutils.T{T: t} - - origErr := withstack.WithStack(errors.New("hello")) - t.Logf("start err: %# v", pretty.Formatter(origErr)) - - // Show that there is indeed a stack trace. - s, ok := origErr.(errbase.SafeDetailer) - if !ok { - t.Errorf("unexpected: error does not implement SafeDetailer") - } else { - details := s.SafeDetails() - tt.Check(len(details) > 0 && strings.Contains(details[0], "withstack_test.go")) - } - - enc := errbase.EncodeError(context.Background(), origErr) - newErr := errbase.DecodeError(context.Background(), enc) - - // In any case, the library preserves the error message. - tt.CheckStringEqual(newErr.Error(), origErr.Error()) - - // The decoded error is marker-equal with the original one. - tt.Check(markers.Is(newErr, origErr)) - - // Also the new error includes the stack trace. - s, ok = newErr.(errbase.SafeDetailer) - if !ok { - t.Errorf("unexpected: error does not implement SafeDetailer") - } else { - details := s.SafeDetails() - tt.Check(len(details) > 0 && strings.Contains(details[0], "withstack_test.go")) - } -} - -func TestFormat(t *testing.T) { - tt := testutils.T{t} - - baseErr := goErr.New("woo") - const woo = `woo` - const waawoo = `waa: woo` - testCases := []struct { - name string - err error - expFmtSimple string - expFmtVerbose string - }{ - {"withstack", - withstack.WithStack(baseErr), - woo, ` -woo -(1) attached stack trace - | github.com/cockroachdb/errors/withstack_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (2) woo -Error types: (1) *withstack.withStack (2) *errors.errorString`}, - - {"withstack + wrapper", - withstack.WithStack(&werrFmt{baseErr, "waa"}), - waawoo, ` -waa: woo -(1) attached stack trace - | github.com/cockroachdb/errors/withstack_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (2) waa - | -- verbose wrapper: - | waa -Wraps: (3) woo -Error types: (1) *withstack.withStack (2) *withstack_test.werrFmt (3) *errors.errorString`}, - - {"wrapper + withstack", - &werrFmt{withstack.WithStack(baseErr), "waa"}, - waawoo, ` -waa: woo -(1) waa - | -- verbose wrapper: - | waa -Wraps: (2) attached stack trace - | github.com/cockroachdb/errors/withstack_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (3) woo -Error types: (1) *withstack_test.werrFmt (2) *withstack.withStack (3) *errors.errorString`}, - - {"withstack + withstack", - withstack.WithStack( - withstack.WithStack(baseErr)), - woo, ` -woo -(1) attached stack trace - | github.com/cockroachdb/errors/withstack_test.TestFormat - | - | [...repeated from below...] -Wraps: (2) attached stack trace - | github.com/cockroachdb/errors/withstack_test.TestFormat - | - | testing.tRunner - | - | runtime.goexit - | -Wraps: (3) woo -Error types: (1) *withstack.withStack (2) *withstack.withStack (3) *errors.errorString`}, - } - - for _, test := range testCases { - tt.Run(test.name, func(tt testutils.T) { - err := test.err - - // %s is simple formatting - tt.CheckStringEqual(fmt.Sprintf("%s", err), test.expFmtSimple) - - // %v is simple formatting too, for compatibility with the past. - tt.CheckStringEqual(fmt.Sprintf("%v", err), test.expFmtSimple) - - // %q is always like %s but quotes the result. - ref := fmt.Sprintf("%q", test.expFmtSimple) - tt.CheckStringEqual(fmt.Sprintf("%q", err), ref) - - // %+v is the verbose mode. - refV := strings.TrimPrefix(test.expFmtVerbose, "\n") - spv := fmt.Sprintf("%+v", err) - spv = fileref.ReplaceAllString(spv, "") - // spv = funref.ReplaceAllString(spv, "/${fun}") - spv = strings.ReplaceAll(spv, "\t", "") - tt.CheckStringEqual(spv, refV) - }) - } -} - -var fileref = regexp.MustCompile(`([a-zA-Z0-9\._/@-]*\.(?:go|s):\d+)`) - -type werrFmt struct { - cause error - msg string -} - -var _ errbase.Formatter = (*werrFmt)(nil) - -func (e *werrFmt) Error() string { return fmt.Sprintf("%s: %v", e.msg, e.cause) } -func (e *werrFmt) Unwrap() error { return e.cause } -func (e *werrFmt) Format(s fmt.State, verb rune) { errbase.FormatError(e, s, verb) } -func (e *werrFmt) FormatError(p errbase.Printer) error { - p.Print(e.msg) - if p.Detail() { - p.Printf("-- verbose wrapper:\n%s", e.msg) - } - return e.cause -} diff --git a/withstack_api.go b/withstack_api.go index 1da56f5..db6eb25 100644 --- a/withstack_api.go +++ b/withstack_api.go @@ -16,21 +16,53 @@ package errors import "github.com/cockroachdb/errors/withstack" -// WithStack forwards a definition. +// This file mirrors the WithStack functionality from +// github.com/pkg/errors. We would prefer to reuse the withStack +// struct from that package directly (the library recognizes it well) +// unfortunately github.com/pkg/errors does not enable client code to +// customize the depth at which the stack trace is captured. + +// WithStack annotates err with a stack trace at the point WithStack was called. +// +// Detail is shown: +// - via `errors.GetSafeDetails()` +// - when formatting with `%+v`. +// - in Sentry reports. +// - when innermost stack capture, with `errors.GetOneLineSource()`. func WithStack(err error) error { return withstack.WithStackDepth(err, 1) } -// WithStackDepth forwards a definition. +// WithStackDepth annotates err with a stack trace starting from the +// given call depth. The value zero identifies the caller +// of WithStackDepth itself. +// See the documentation of WithStack() for more details. func WithStackDepth(err error, depth int) error { return withstack.WithStackDepth(err, depth+1) } -// ReportableStackTrace forwards a definition. +// ReportableStackTrace aliases the type of the same name in the sentry +// package. This is used by SendReport(). type ReportableStackTrace = withstack.ReportableStackTrace -// GetOneLineSource forwards a definition. +// GetOneLineSource extracts the file/line/function information +// of the topmost caller in the innermost recorded stack trace. +// The filename is simplified to remove the path prefix. +// +// This is used e.g. to populate the "source" field in +// PostgreSQL errors in CockroachDB. func GetOneLineSource(err error) (file string, line int, fn string, ok bool) { return withstack.GetOneLineSource(err) } -// GetReportableStackTrace forwards a definition. +// GetReportableStackTrace extracts a stack trace embedded in the +// given error in the format suitable for Sentry reporting. +// +// This supports: +// - errors generated by github.com/pkg/errors (either generated +// locally or after transfer through the network), +// - errors generated with WithStack() in this package, +// - any other error that implements a StackTrace() method +// returning a StackTrace from github.com/pkg/errors. +// +// Note: Sentry wants the oldest call frame first, so +// the entries are reversed in the result. func GetReportableStackTrace(err error) *ReportableStackTrace { return withstack.GetReportableStackTrace(err) }