github.com/mgoltzsche/khelm@v1.0.1/cmd/khelm/errlog_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/pkg/errors"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestTraceableRootCause(t *testing.T) {
    12  	simpleErr := fmt.Errorf("simple error")
    13  	traceableErr := errors.New("traceable error")
    14  	wrapped := errors.Wrap(simpleErr, "wrapped")
    15  	msgErr := errors.WithMessage(simpleErr, "msg")
    16  	wrappedMsg := errors.Wrap(msgErr, "wrapped")
    17  	tests := []struct {
    18  		name     string
    19  		input    error
    20  		expected error
    21  	}{
    22  		{"no wrapping or causing", simpleErr, simpleErr},
    23  		{"wrapping", fmt.Errorf("wrapped: %w", traceableErr), traceableErr},
    24  		{"causing", errors.Wrap(traceableErr, "wrapped"), traceableErr},
    25  		{"deeply nested", errors.Wrap(fmt.Errorf("errorf: %w", errors.Wrap(traceableErr, "wrappedinner")), "wrappedouter"), traceableErr},
    26  		{"root cause without stack trace", errors.Wrap(wrapped, "wrappedouter"), wrapped},
    27  		{"root cause without stack trace but formatter", errors.Wrap(wrappedMsg, "wrappedouter"), wrappedMsg},
    28  	}
    29  
    30  	for _, tt := range tests {
    31  		t.Run(tt.name, func(t *testing.T) {
    32  			err := traceableRootCause(tt.input)
    33  			require.Equal(t, tt.expected, err)
    34  		})
    35  	}
    36  }