feature: add codecoverage and add race detection in go test, fix: fix race conditions

This commit is contained in:
zenix 2022-06-10 14:01:14 +09:00
parent a4e3fd5c41
commit f1e24bf43b
5 changed files with 44 additions and 7 deletions

View File

@ -63,10 +63,15 @@ jobs:
run: go build -v ./cmd/bbgo
- name: Test
run: go test ./pkg/...
run: go test -race -coverprofile coverage.txt -covermode atomic ./pkg/...
- name: TestDnum
run: go test -tags dnum ./pkg/...
run: go test -race -coverprofile coverage_dnum.txt -covermode atomic -tags dnum ./pkg/...
- name: Upload Coverage Report
uses: codecov/codecov-actions@v2
with:
files: ./coverage.txt,./coverage_dnum.txt
- name: Create dotenv file
run: |

3
.gitignore vendored
View File

@ -44,3 +44,6 @@ otp*png
*.swp
/pkg/backtest/assets.go
coverage.txt
coverage_dum.txt

23
codecov.yml Normal file
View File

@ -0,0 +1,23 @@
codecov:
require_ci_to_pass: true
comment:
behavior: default
layout: "reach,diff,flags,files,footer"
require_changes: no
parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: no
macro: no
coverage:
precision: 2
round: down
range: "70...100"
github_checks:
annotations: false

View File

@ -133,6 +133,8 @@ func (b *Buffer) AddUpdate(o types.SliceOrderBook, firstUpdateID int64, finalArg
}
func (b *Buffer) fetchAndPush() error {
b.mu.Lock()
defer b.mu.Unlock()
book, finalUpdateID, err := b.fetcher()
if err != nil {
return err
@ -140,9 +142,6 @@ func (b *Buffer) fetchAndPush() error {
log.Debugf("fetched depth snapshot, final update id %d", finalUpdateID)
b.mu.Lock()
defer b.mu.Unlock()
if len(b.buffer) > 0 {
// the snapshot is too early
if finalUpdateID < b.buffer[0].FirstUpdateID {

View File

@ -1,6 +1,7 @@
package util
import (
"sync"
"testing"
"time"
@ -10,14 +11,19 @@ import (
func TestReonce_DoAndReset(t *testing.T) {
var cnt = 0
var reonce Reonce
var wgAll, wg sync.WaitGroup
wg.Add(1)
wgAll.Add(2)
go reonce.Do(func() {
t.Log("once #1")
time.Sleep(10 * time.Millisecond)
cnt++
wg.Done()
wgAll.Done()
})
// make sure it's locked
time.Sleep(10 * time.Millisecond)
wg.Wait()
t.Logf("reset")
reonce.Reset()
@ -25,8 +31,9 @@ func TestReonce_DoAndReset(t *testing.T) {
t.Log("once #2")
time.Sleep(10 * time.Millisecond)
cnt++
wgAll.Done()
})
time.Sleep(time.Second)
wgAll.Wait()
assert.Equal(t, 2, cnt)
}