Implement transfer of Corredor stack to int. errors
This commit is contained in:
@@ -10,7 +10,6 @@ import (
|
||||
"github.com/cortezaproject/corteza-server/pkg/rbac"
|
||||
"github.com/cortezaproject/corteza-server/pkg/sentry"
|
||||
"github.com/cortezaproject/corteza-server/system/types"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/go-chi/chi/middleware"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
@@ -2,6 +2,7 @@ package errors
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -51,26 +52,34 @@ func collectStack(skip int) []*frame {
|
||||
// Converts node stack trace (from Error().stack) to internal structure
|
||||
//
|
||||
// Node stack traces are received with errors from Corredor (node.js) automation server
|
||||
func convertNodeStack(stack []string) []*frame {
|
||||
// @todo
|
||||
func convertNodeStack(nf []string) []*frame {
|
||||
conv := make([]*frame, len(nf))
|
||||
for i := range nf {
|
||||
var (
|
||||
f = &frame{}
|
||||
file, lno string
|
||||
)
|
||||
|
||||
//(metadata.MD) (len=2) {
|
||||
// (string) (len=12) "content-type": ([]string) (len=1 cap=1) {
|
||||
// (string) (len=16) "application/grpc"
|
||||
// },
|
||||
// (string) (len=5) "stack": ([]string) (len=10 cap=10) {
|
||||
// (string) (len=93) "Object.exec (/Users/darh/dev/corteza/server-corredor/usr/testing/server-scripts/foo.js:12:11)",
|
||||
// (string) (len=127) "Object.<anonymous> (/Users/darh/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/src/corredor/exec.ts:26:35)",
|
||||
// (string) (len=28) "Generator.next (<anonymous>)",
|
||||
// (string) (len=100) "/Users/darh/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js:277:71",
|
||||
// (string) (len=25) "new Promise (<anonymous>)",
|
||||
// (string) (len=112) "__awaiter (/Users/darh/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js:273:12)",
|
||||
// (string) (len=114) "Object.Exec (/Users/darh/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js:483:12)",
|
||||
// (string) (len=97) "ServerScripts.exec (/Users/darh/dev/corteza/server-corredor/src/services/server-scripts.ts:86:17)",
|
||||
// (string) (len=96) "Object.Exec (/Users/darh/dev/corteza/server-corredor/src/grpc-handlers/server-scripts.ts:142:11)",
|
||||
// (string) (len=78) "/Users/darh/dev/corteza/server-corredor/node_modules/grpc/src/server.js:593:13"
|
||||
// }
|
||||
//}
|
||||
if p := strings.Index(nf[i], " ("); p > 0 {
|
||||
f.Func = nf[i][:p]
|
||||
|
||||
return nil
|
||||
file = nf[i][p+2 : len(nf[i])-1]
|
||||
} else {
|
||||
file = nf[i]
|
||||
}
|
||||
|
||||
parts := strings.Split(file, ":")
|
||||
f.File = parts[0]
|
||||
|
||||
if len(parts) >= 2 {
|
||||
lno = parts[1]
|
||||
}
|
||||
|
||||
if lno != "" {
|
||||
f.Line, _ = strconv.Atoi(lno)
|
||||
}
|
||||
|
||||
conv[i] = f
|
||||
}
|
||||
return conv
|
||||
}
|
||||
|
||||
47
pkg/errors/stack_test.go
Normal file
47
pkg/errors/stack_test.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package errors
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_convertNodeStack(t *testing.T) {
|
||||
converted := convertNodeStack([]string{
|
||||
"Object.exec (/dev/corteza/server-corredor/usr/testing/server-scripts/foo.js:12:11)",
|
||||
"Object.<anonymous> (/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/src/corredor/exec.ts:26:35)",
|
||||
"Generator.next (<anonymous>)",
|
||||
"/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js:277:71",
|
||||
"new Promise (<anonymous>)",
|
||||
"__awaiter (/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js:273:12)",
|
||||
"Object.Exec (/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js:483:12)",
|
||||
"ServerScripts.exec (/dev/corteza/server-corredor/src/services/server-scripts.ts:86:17)",
|
||||
"Object.Exec (/dev/corteza/server-corredor/src/grpc-handlers/server-scripts.ts:142:11)",
|
||||
"/dev/corteza/server-corredor/node_modules/grpc/src/server.js:593:13",
|
||||
})
|
||||
|
||||
expecting := []*frame{
|
||||
{"Object.exec", "/dev/corteza/server-corredor/usr/testing/server-scripts/foo.js", 12},
|
||||
{"Object.<anonymous>", "/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/src/corredor/exec.ts", 26},
|
||||
{"Generator.next", "<anonymous>", 0},
|
||||
{"", "/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js", 277},
|
||||
{"new Promise", "<anonymous>", 0},
|
||||
{"__awaiter", "/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js", 273},
|
||||
{"Object.Exec", "/dev/corteza/server-corredor/node_modules/@cortezaproject/corteza-js/dist/index.js", 483},
|
||||
{"ServerScripts.exec", "/dev/corteza/server-corredor/src/services/server-scripts.ts", 86},
|
||||
{"Object.Exec", "/dev/corteza/server-corredor/src/grpc-handlers/server-scripts.ts", 142},
|
||||
{"", "/dev/corteza/server-corredor/node_modules/grpc/src/server.js", 593},
|
||||
}
|
||||
|
||||
if len(expecting) != len(converted) {
|
||||
t.Errorf("converted stack length (%d) not match expectations (%d)", len(converted), len(expecting))
|
||||
}
|
||||
|
||||
for i := range expecting {
|
||||
if !reflect.DeepEqual(converted[i], expecting[i]) {
|
||||
t.Errorf("converted stack frame %d does not match\nexpecting: %v\ngot: %v", i, expecting[i], converted[i])
|
||||
} else {
|
||||
t.Logf("converted stack frame %d ok", i)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user