Chanyut
Chanyut

Reputation: 43

Golang Revel Assertf causes panic

I have created revel test suite, I use Assertf for checking an error.

t.Assertf(err == nil, "error occurred: %v", err)

It worked without any problem in my Windows and also Mac OSX. But in my remote server, Ubuntu 16.04, whenever assert error, I got error message like this.

server.go:2753: http: panic serving [::1]:44626: open /go/src/runtime/debug/stack.go: no such file or directory

goroutine 74 [running]:
net/http.(*conn).serve.func1(0xc4204a7f40)
    /usr/local/go/src/net/http/server.go:1721 +0xd0
panic(0xa04ba0, 0xc4204c2f60)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel.MustReadLines(0xc420198a4c, 0x1e, 0x1, 0xc4204d2a80, 0x3e)
    /go/src/github.com/revel/revel/util.go:56 +0x168
github.com/revel/revel.NewErrorFromPanic(0xa04ba0, 0xc4204c2f00, 0x0)
    /go/src/github.com/revel/revel/errors.go:63 +0x25b
github.com/revel/revel.handleInvocationPanic(0xc42024e0c0, 0xa04ba0, 0xc4204c2f00)
    /go/src/github.com/revel/revel/panic.go:25 +0x4d
github.com/revel/revel.PanicFilter.func1(0xc42024e0c0)
    /go/src/github.com/revel/revel/panic.go:16 +0x5c
panic(0xa04ba0, 0xc4204c2f00)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel.InterceptorFilter.func1(0xc42024e0c0)
    /go/src/github.com/revel/revel/intercept.go:97 +0x7d
panic(0xa04ba0, 0xc4204c2f00)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel.MustReadLines(0xc42018605a, 0x1e, 0x1, 0xc420278d10, 0xad)
    /go/src/github.com/revel/revel/util.go:56 +0x168
github.com/revel/revel.NewErrorFromPanic(0x9feea0, 0xc4204d8aa0, 0xc4204d8aa0)
    /go/src/github.com/revel/revel/errors.go:63 +0x25b
github.com/revel/modules/testrunner/app/controllers.TestRunner.Run.func1.1(0xaa9ba0, 0xc4204c2a80, 0x16, 0xc4204d284c, 0x15, 0xc4204d2862, 0x14, 0xc4203fac78)
    /go/src/github.com/revel/modules/testrunner/app/controllers/testrunner.go:113 +0x70
panic(0x9feea0, 0xc4204d8aa0)
    /usr/local/go/src/runtime/panic.go:489 +0x2cf
github.com/revel/revel/testing.(*TestSuite).Assertf(0xc4204c2a80, 0xc4203fa600, 0xac7700, 0x16, 0xc4203fa620, 0x1, 0x1)
    /go/src/github.com/revel/revel/testing/testsuite.go:313 +0x87
madvrstudio/bnkjigsaw/tests.(*ReceiptValidationTest).TestValidateAppStore(0xc4204c2a80)

Upvotes: 2

Views: 280

Answers (2)

ralfthewise
ralfthewise

Reputation: 583

This is due to a bug in revel - https://github.com/revel/revel/issues/1287

The issue is that your server has GOPATH set equal to /go, and revel incorrectly identifies the first frame of the stacktrace (/usr/local/go/src/runtime/debug/stack.go:24) as being in the GOPATH because it contains /go/src. You can work around the issue by manually setting/maintaining a different GOPATH on your server that doesn't contain /go in the path anywhere. This is also an issue with the official docker containers for go found at https://hub.docker.com/_/golang/

Upvotes: 0

notzippy
notzippy

Reputation: 508

Assert triggers a panic, and the panic filter is failing because it cannot locate the source file of the go code that caused the error. If you have stripped away the source files from the deployment this could cause that (IMHO it really shouldn't) but looking at the code it is attempting to load up the file which the stack says has the error on it.

Upvotes: 1

Related Questions