github.com/grafana/synthetic-monitoring-agent@v0.64.2/internal/k6runner/error_test.go (about)

     1  package k6runner
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  )
     7  
     8  func TestErrorFromLogs(t *testing.T) {
     9  	t.Parallel()
    10  
    11  	for _, tc := range []struct {
    12  		name     string
    13  		logLines string
    14  		expect   error
    15  	}{
    16  		{
    17  			name:     "console.error",
    18  			logLines: `time="2024-04-18T19:39:22+02:00" level=error msg="console error" source=console`,
    19  			expect:   nil,
    20  		},
    21  		{
    22  			name: "stack trace",
    23  			logLines: `
    24  			time="2024-04-18T19:39:22+02:00" level=error msg="console error" source=console
    25  			level=error msg=foobar source=stacktrace
    26  			`,
    27  			expect: ErrStacktrace,
    28  		},
    29  		{
    30  			name: "unsupported browser",
    31  			logLines: `
    32  time="2024-07-12T16:47:13+02:00" level=error msg="Uncaught (in promise) GoError: browser not found in registry. make sure to set browser type option in scenario definition in order to use the browser module\n\tat github.com/grafana/xk6-browser/browser.syncMapBrowser.func7 (native)\n\tat file:///tmp/roobre/browser.js:20:15(4)\n" executor=shared-iterations scenario=default
    33  			`,
    34  			expect: ErrThrown,
    35  		},
    36  		{
    37  			name: "throw new Error()",
    38  			logLines: `
    39  time="2024-07-12T16:48:01+02:00" level=error msg="Uncaught (in promise) Error: foobar\n\tat file:///tmp/roobre/browser.js:22:8(8)\n" executor=shared-iterations scenario=ui
    40  			`,
    41  			expect: ErrThrown,
    42  		},
    43  		{
    44  			name: "required filds in different lines",
    45  			logLines: `
    46  			lever=error msg=something
    47  			source=stacktrace msg=something
    48  			`,
    49  			expect: nil,
    50  		},
    51  		{
    52  			name: "badly formatted lines and stactrace",
    53  			//nolint:dupword // Duped
    54  			logLines: `
    55  			something something
    56  			lever=error something something
    57  			source=stacktrace something something
    58  			level=error msg="missing a quote
    59  			level=error msg=foobar source=stacktrace
    60  			`,
    61  			expect: nil, // FIXME: Probably the parser should tolerate malformed lines.
    62  		},
    63  	} {
    64  		t.Run(tc.name, func(t *testing.T) {
    65  			t.Parallel()
    66  
    67  			err := errorFromLogs([]byte(tc.logLines))
    68  			if !errors.Is(err, tc.expect) {
    69  				t.Fatalf("Unexpected error: %v", err)
    70  			}
    71  		})
    72  	}
    73  }