Anna Shaleva
d8e945978a
neotest: sort coverage blocks within a test scope
...
Make the behaviour similar to the `go test` output. It's not a problem
for the `go cover` tool, but the sorted file is easier to debug and analize.
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
2024-10-16 16:03:46 +03:00
Anna Shaleva
c747bb8ff7
neotest: preallocate coverage blocks list
...
And always use pointers for coverage block processing, dereference is
excessive in this context.
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
2024-10-15 15:44:54 +03:00
Anna Shaleva
49f2e1dc64
neotest: gracefully report about coverage setup error
...
Don't use panic when we can use t.Fatal.
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
2024-10-15 15:44:54 +03:00
Anna Shaleva
2dc588ea95
neotest: distinguish coverage modes
...
Use calls frequency calculated by executor in the final coverage
profile for `atomic` cover mode. Support only `set` cover mode for now
due to #3587 .
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
2024-10-15 15:44:53 +03:00
Anna Shaleva
7fac3bcd6f
neotest: don't collect coverage for contracts with empty DI
...
Users are allowed to provide any contract to neotest, including those
contracts that don't have DebugInfo filled in. Neotest should filter
them out, otherwise panic may occur on attempt to write coverage profile:
```
--- FAIL: TestDeploys (0.01s)
panic: runtime error: invalid memory address or nil pointer dereference
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0xc6f5b5]
goroutine 1735 [running]:
testing.tRunner.func1.2({0xd7aa80, 0x1723f60})
/usr/local/go/src/testing/testing.go:1631 +0x24a
testing.tRunner.func1()
/usr/local/go/src/testing/testing.go:1634 +0x377
panic({0xd7aa80?, 0x1723f60?})
/usr/local/go/src/runtime/panic.go:770 +0x132
github.com/nspcc-dev/neo-go/pkg/neotest.processCover()
/home/anna/go/pkg/mod/github.com/nspcc-dev/neo-go@v0.106.4-0.20241007094345-11151938b9bd/pkg/neotest/coverage.go:143 +0xd5
github.com/nspcc-dev/neo-go/pkg/neotest.writeCoverageReport({0x10c6260, 0xc00033a378})
/home/anna/go/pkg/mod/github.com/nspcc-dev/neo-go@v0.106.4-0.20241007094345-11151938b9bd/pkg/neotest/coverage.go:123 +0x4b
github.com/nspcc-dev/neo-go/pkg/neotest.reportCoverage({0x10db278, 0xc00021a000})
/home/anna/go/pkg/mod/github.com/nspcc-dev/neo-go@v0.106.4-0.20241007094345-11151938b9bd/pkg/neotest/coverage.go:118 +0x165
github.com/nspcc-dev/neo-go/pkg/neotest.(*Executor).trackCoverage.func1()
/home/anna/go/pkg/mod/github.com/nspcc-dev/neo-go@v0.106.4-0.20241007094345-11151938b9bd/pkg/neotest/basic.go:182 +0x1b
testing.(*common).Cleanup.func1()
/usr/local/go/src/testing/testing.go:1175 +0x10f
testing.(*common).runCleanup(0xc00021a000, 0x58d7c0?)
/usr/local/go/src/testing/testing.go:1353 +0xdb
testing.(*common).runCleanup.func2()
/usr/local/go/src/testing/testing.go:1337 +0x47
panic({0xd7aa80?, 0x1723f60?})
```
An example of such partially-filled contract is:
a8d5e001a2/tests/deploys_test.go (L13)
a8d5e001a2/contracts/contracts.go (L96)
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
2024-10-07 17:51:19 +03:00
Slava0135
d0c45477f5
neotest: implement coverage collection
...
Test coverage is automatically enabled when go test is running with coverage
enabled. It can be disabled for any Executor by using relevant methods.
Coverage is gathered by capturing VM OPs during test contract execution and
mapping them to the contract source code using the DebugInfo information.
Signed-off-by: Slava0135 <super.novalskiy_0135@inbox.ru>
2024-08-19 14:39:18 +03:00