diff options
author | Valery Piashchynski <[email protected]> | 2020-11-04 16:38:54 +0300 |
---|---|---|
committer | Valery Piashchynski <[email protected]> | 2020-11-04 16:38:54 +0300 |
commit | a3dd9f2a28d91df0e0d1ad229b67297206357c07 (patch) | |
tree | c53893144e9f2228b490ee0f0a66ff875706d36b | |
parent | 0304f09d7e5fa0c76b86429a654aeb366cec6391 (diff) |
Fix CI issues, add RPC tests to the CI
-rwxr-xr-x | .github/workflows/ci-build.yml | 17 | ||||
-rwxr-xr-x | go.mod | 5 | ||||
-rwxr-xr-x | go.sum | 3 | ||||
-rwxr-xr-x | plugins/rpc/rpc.go | 43 | ||||
-rw-r--r-- | plugins/rpc/tests/plugin2.go | 3 | ||||
-rw-r--r-- | plugins/rpc/tests/rpc_test.go | 10 | ||||
-rw-r--r-- | rpc.txt | 18 | ||||
-rwxr-xr-x | static_pool.go | 2 |
8 files changed, 67 insertions, 34 deletions
diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 94549c37..9b02cf92 100755 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -1,6 +1,6 @@ name: CI -on: [push, pull_request] +on: [ push, pull_request ] jobs: build: @@ -9,9 +9,9 @@ jobs: strategy: fail-fast: false matrix: - php: [7.2, 7.3, 7.4] - go: [1.14, 1.15] - os: [ubuntu-latest] + php: [ 7.2, 7.3, 7.4 ] + go: [ 1.14, 1.15 ] + os: [ ubuntu-latest ] env: GO111MODULE: on steps: @@ -57,16 +57,17 @@ jobs: - name: Install Composer dependencies run: composer install --prefer-dist --no-interaction --no-suggest # --prefer-source -# - name: Analyze PHP sources -# run: composer analyze + # - name: Analyze PHP sources + # run: composer analyze - name: Install Go dependencies run: go mod download - name: Run golang tests run: | - composer update - go test -v -coverprofile=lib.txt -covermode=atomic + go test -v . -tags=debug -coverprofile=lib.txt -covermode=atomic + go test -v ./plugins/rpc -tags=debug -coverprofile=rpc_config.txt -covermode=atomic + go test -v ./plugins/rpc/tests -tags=debug -coverprofile=rpc.txt -covermode=atomic - name: Run code coverage env: @@ -3,12 +3,15 @@ module github.com/spiral/roadrunner/v2 go 1.15 require ( + github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/fatih/color v1.10.0 + github.com/go-ole/go-ole v1.2.4 // indirect github.com/json-iterator/go v1.1.10 + github.com/pkg/errors v0.9.1 github.com/shirou/gopsutil v3.20.10+incompatible github.com/spf13/viper v1.7.1 github.com/spiral/endure v1.0.0-beta14 - github.com/spiral/errors v1.0.1 + github.com/spiral/errors v1.0.2 github.com/spiral/goridge/v2 v2.4.6 github.com/stretchr/testify v1.6.1 github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a @@ -247,10 +247,13 @@ github.com/spiral/errors v1.0.0 h1:wdmJqAFY2Uf8KFK6b8Wkh6vxX++2+GwJWAUplrNTLD0= github.com/spiral/errors v1.0.0/go.mod h1:SwMSZVdZkkJVgXNNafccqOaxWg0XPzVU/dEdUEInE0o= github.com/spiral/errors v1.0.1 h1:OyKLwQH+42hhaRYuXGzfPKCFOmawA/PYXTY9wsK99n4= github.com/spiral/errors v1.0.1/go.mod h1:SwMSZVdZkkJVgXNNafccqOaxWg0XPzVU/dEdUEInE0o= +github.com/spiral/errors v1.0.2 h1:i/XMmA2VJt9sD64N4/zgQ9Y0cwlNQRLDaxOZPZV09D4= +github.com/spiral/errors v1.0.2/go.mod h1:SwMSZVdZkkJVgXNNafccqOaxWg0XPzVU/dEdUEInE0o= github.com/spiral/goridge/v2 v2.4.5 h1:rg4lLEJLrEh1Wj6G1qTsYVbYiQvig6mOR1F9GyDIGm8= github.com/spiral/goridge/v2 v2.4.5/go.mod h1:C/EZKFPON9lypi8QO7I5ObgVmrIzTmhZqFz/tmypcGc= github.com/spiral/goridge/v2 v2.4.6 h1:9u/mrxCtOSy0lnumrpPCSOlGBX/Vprid/hFsnzWrd6k= github.com/spiral/goridge/v2 v2.4.6/go.mod h1:mYjL+Ny7nVfLqjRwIYV2pUSQ61eazvVclHII6FfZfYc= +github.com/spiral/roadrunner v1.8.4 h1:ertz4272GMOf7R/br/GRhvC0zqXodOwstC26Zao4NoI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= diff --git a/plugins/rpc/rpc.go b/plugins/rpc/rpc.go index cda42aa0..5203fc65 100755 --- a/plugins/rpc/rpc.go +++ b/plugins/rpc/rpc.go @@ -1,7 +1,9 @@ package rpc import ( + "net" "net/rpc" + "sync/atomic" "go.uber.org/zap" @@ -28,7 +30,8 @@ type Plugin struct { log *zap.Logger rpc *rpc.Server services []Pluggable - close chan struct{} + listener net.Listener + closed *uint32 } // Init rpc service. Must return true if service is enabled. @@ -49,7 +52,9 @@ func (s *Plugin) Init(cfg config.Configurer, log *zap.Logger) error { } s.log = log - s.close = make(chan struct{}, 1) + state := uint32(0) + s.closed = &state + atomic.StoreUint32(s.closed, 0) return s.cfg.Valid() } @@ -80,7 +85,8 @@ func (s *Plugin) Serve() chan error { services = append(services, s.services[i].Name()) } - ln, err := s.cfg.Listener() + var err error + s.listener, err = s.cfg.Listener() if err != nil { errCh <- err return errCh @@ -90,22 +96,20 @@ func (s *Plugin) Serve() chan error { go func() { for { - select { - case <-s.close: - // log error - err = ln.Close() - if err != nil { - errCh <- errors.E(errors.Op("close RPC socket"), err) - } - return - default: - conn, err := ln.Accept() - if err != nil { - continue + conn, err := s.listener.Accept() + if err != nil { + if atomic.LoadUint32(s.closed) == 1 { + // just log and continue, this is not a critical issue, we just called Stop + s.log.Error("listener accept error, connection closed", zap.Error(err)) + return } - go s.rpc.ServeCodec(goridge.NewCodec(conn)) + s.log.Error("listener accept error", zap.Error(err)) + errCh <- errors.E(errors.Op("listener accept"), errors.Serve, err) + return } + + go s.rpc.ServeCodec(goridge.NewCodec(conn)) } }() @@ -114,7 +118,12 @@ func (s *Plugin) Serve() chan error { // Stop stops the service. func (s *Plugin) Stop() error { - s.close <- struct{}{} + // store closed state + atomic.StoreUint32(s.closed, 1) + err := s.listener.Close() + if err != nil { + return errors.E(errors.Op("stop RPC socket"), err) + } return nil } diff --git a/plugins/rpc/tests/plugin2.go b/plugins/rpc/tests/plugin2.go index 854bf097..2a0ae1a8 100644 --- a/plugins/rpc/tests/plugin2.go +++ b/plugins/rpc/tests/plugin2.go @@ -1,6 +1,7 @@ package tests import ( + "fmt" "net" "net/rpc" "time" @@ -37,6 +38,8 @@ func (p2 *Plugin2) Serve() chan error { errCh <- err return } + fmt.Println("--------------") + fmt.Println(ret) if ret != "Hello, username: Valery" { errCh <- errors.E("wrong response") return diff --git a/plugins/rpc/tests/rpc_test.go b/plugins/rpc/tests/rpc_test.go index 0014cc2a..88267dfb 100644 --- a/plugins/rpc/tests/rpc_test.go +++ b/plugins/rpc/tests/rpc_test.go @@ -142,7 +142,7 @@ func TestRpcDisabled(t *testing.T) { sig := make(chan os.Signal, 1) signal.Notify(sig, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - tt := time.NewTimer(time.Second * 10) + tt := time.NewTimer(time.Second * 20) for { select { @@ -153,7 +153,7 @@ func TestRpcDisabled(t *testing.T) { } assert.Error(t, e.Error) err = cont.Stop() - assert.Error(t, e.Error) + assert.Error(t, err) return case <-sig: err = cont.Stop() @@ -163,11 +163,7 @@ func TestRpcDisabled(t *testing.T) { return case <-tt.C: // timeout - err = cont.Stop() - if err != nil { - assert.FailNow(t, "error", err.Error()) - } - assert.Fail(t, "timeout") + return } } } diff --git a/rpc.txt b/rpc.txt new file mode 100644 index 00000000..335e77ef --- /dev/null +++ b/rpc.txt @@ -0,0 +1,18 @@ +mode: atomic +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin1.go:13.54,16.2 2 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin1.go:18.39,21.2 2 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin1.go:23.33,25.2 1 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin1.go:27.34,29.2 1 2 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin1.go:31.54,33.2 1 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin1.go:39.57,42.2 2 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:18.33,20.2 1 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:22.39,25.12 2 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:49.2,49.14 1 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:25.12,29.17 3 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:33.3,36.17 4 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:40.3,40.39 1 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:45.3,46.9 2 1 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:29.17,32.4 2 0 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:36.17,39.4 2 0 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:40.39,43.4 2 0 +github.com/spiral/roadrunner/v2/plugins/rpc/tests/plugin2.go:52.33,54.2 1 1 diff --git a/static_pool.go b/static_pool.go index be7ad6e3..66dac7c3 100755 --- a/static_pool.go +++ b/static_pool.go @@ -5,7 +5,7 @@ import ( "fmt" "os/exec" - "github.com/spiral/roadrunner/v2/errors" + "github.com/spiral/errors" "github.com/spiral/roadrunner/v2/util" ) |