github.com/grafana/pyroscope@v1.18.0/pkg/frontend/vcs/source/golang/golang_test.go (about)

     1  package golang
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestIsStandardLibraryPath(t *testing.T) {
    10  	for _, tt := range []struct {
    11  		input           string
    12  		expectedPath    string
    13  		expectedVersion string
    14  		expectedOk      bool
    15  	}{
    16  		{
    17  			input:      "github.com/grafana/grafana/pkg/frontend/vcs.go",
    18  			expectedOk: false,
    19  		},
    20  		{
    21  			input:        "/usr/local/go/src/bufio/bufio.go",
    22  			expectedPath: "bufio/bufio.go",
    23  			expectedOk:   true,
    24  		},
    25  		{
    26  			input:        "$GOROOT/src/unicode/utf8/utf8.go",
    27  			expectedPath: "unicode/utf8/utf8.go",
    28  			expectedOk:   true,
    29  		},
    30  		{
    31  			input:        "fmt/scan.go",
    32  			expectedPath: "fmt/scan.go",
    33  			expectedOk:   true,
    34  		},
    35  		{
    36  			input:        "$GOROOT/src/vendor/golang.org/x/crypto/cryptobyte/asn1.go",
    37  			expectedPath: "vendor/golang.org/x/crypto/cryptobyte/asn1.go",
    38  			expectedOk:   true,
    39  		},
    40  		{
    41  			input:        "/usr/local/go/src/vendor/golang.org/x/net/http2/hpack/tables.go",
    42  			expectedPath: "vendor/golang.org/x/net/http2/hpack/tables.go",
    43  			expectedOk:   true,
    44  		},
    45  		{
    46  			input:           "/usr/local/Cellar/go/1.21.3/libexec/src/runtime/netpoll_kqueue.go",
    47  			expectedPath:    "runtime/netpoll_kqueue.go",
    48  			expectedVersion: "1.21.3",
    49  			expectedOk:      true,
    50  		},
    51  		{
    52  			input:           "/opt/hostedtoolcache/go/1.21.6/x64/src/runtime/mgc.go",
    53  			expectedPath:    "runtime/mgc.go",
    54  			expectedVersion: "1.21.6",
    55  			expectedOk:      true,
    56  		},
    57  		{
    58  			input:           "/Users/pyroscope/.golang/packages/pkg/mod/golang.org/toolchain@v0.0.1-go1.24.6.darwin-arm64/src/runtime/proc.go",
    59  			expectedPath:    "runtime/proc.go",
    60  			expectedVersion: "1.24.6",
    61  			expectedOk:      true,
    62  		},
    63  		{
    64  			input:           "/Users/christian/.golang/packages/pkg/mod/golang.org/toolchain@v0.0.1-go1.25rc1.darwin-arm64/src/runtime/type.go",
    65  			expectedPath:    "runtime/type.go",
    66  			expectedVersion: "1.25rc1",
    67  			expectedOk:      true,
    68  		},
    69  	} {
    70  		t.Run(tt.input, func(t *testing.T) {
    71  			actualPath, actualVersion, ok := IsStandardLibraryPath(tt.input)
    72  			if !tt.expectedOk {
    73  				require.False(t, ok)
    74  			}
    75  			require.Equal(t, tt.expectedPath, actualPath)
    76  			require.Equal(t, tt.expectedVersion, actualVersion)
    77  		})
    78  	}
    79  }
    80  
    81  func TestVendorRelativePath(t *testing.T) {
    82  	for _, tt := range []struct {
    83  		in         string
    84  		expected   string
    85  		expectedOk bool
    86  	}{
    87  		{
    88  			in:         "/drone/src/vendor/google.golang.org/protobuf/proto/merge.go",
    89  			expected:   "/vendor/google.golang.org/protobuf/proto/merge.go",
    90  			expectedOk: true,
    91  		},
    92  		{
    93  			in:         "google.golang.org/protobuf/proto/merge.go",
    94  			expected:   "",
    95  			expectedOk: false,
    96  		},
    97  	} {
    98  		t.Run(tt.in, func(t *testing.T) {
    99  			actual, ok := VendorRelativePath(tt.in)
   100  			if !tt.expectedOk {
   101  				require.False(t, ok)
   102  			}
   103  			require.Equal(t, tt.expected, actual)
   104  		})
   105  	}
   106  }