github.com/onsi/ginkgo@v1.16.6-0.20211118180735-4e1925ba4c95/internal/parallel_support/client_server.go (about) 1 package parallel_support 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "time" 8 9 "github.com/onsi/ginkgo/reporters" 10 "github.com/onsi/ginkgo/types" 11 ) 12 13 type BeforeSuiteState struct { 14 Data []byte 15 State types.SpecState 16 } 17 18 type ParallelIndexCounter struct { 19 Index int 20 } 21 22 var ErrorGone = fmt.Errorf("gone") 23 var ErrorFailed = fmt.Errorf("failed") 24 var ErrorEarly = fmt.Errorf("early") 25 26 var POLLING_INTERVAL = 50 * time.Millisecond 27 28 type Server interface { 29 Start() 30 Close() 31 Address() string 32 RegisterAlive(node int, alive func() bool) 33 GetSuiteDone() chan interface{} 34 GetOutputDestination() io.Writer 35 SetOutputDestination(io.Writer) 36 } 37 38 type Client interface { 39 Connect() bool 40 Close() error 41 42 PostSuiteWillBegin(report types.Report) error 43 PostDidRun(report types.SpecReport) error 44 PostSuiteDidEnd(report types.Report) error 45 PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error 46 BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error) 47 BlockUntilNonprimaryProcsHaveFinished() error 48 BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error) 49 FetchNextCounter() (int, error) 50 PostAbort() error 51 ShouldAbort() bool 52 Write(p []byte) (int, error) 53 } 54 55 func NewServer(parallelTotal int, reporter reporters.Reporter) (Server, error) { 56 if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" { 57 return newHttpServer(parallelTotal, reporter) 58 } else { 59 return newRPCServer(parallelTotal, reporter) 60 } 61 } 62 63 func NewClient(serverHost string) Client { 64 if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" { 65 return newHttpClient(serverHost) 66 } else { 67 return newRPCClient(serverHost) 68 } 69 }