...
1 package parallel_support
2
3 import (
4 "fmt"
5 "io"
6 "os"
7 "time"
8
9 "github.com/onsi/ginkgo/v2/reporters"
10 "github.com/onsi/ginkgo/v2/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 PostReportBeforeSuiteCompleted(state types.SpecState) error
46 BlockUntilReportBeforeSuiteCompleted() (types.SpecState, error)
47 PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error
48 BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error)
49 BlockUntilNonprimaryProcsHaveFinished() error
50 BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error)
51 FetchNextCounter() (int, error)
52 PostAbort() error
53 ShouldAbort() bool
54 PostEmitProgressReport(report types.ProgressReport) error
55 Write(p []byte) (int, error)
56 }
57
58 func NewServer(parallelTotal int, reporter reporters.Reporter) (Server, error) {
59 if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" {
60 return newHttpServer(parallelTotal, reporter)
61 } else {
62 return newRPCServer(parallelTotal, reporter)
63 }
64 }
65
66 func NewClient(serverHost string) Client {
67 if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" {
68 return newHttpClient(serverHost)
69 } else {
70 return newRPCClient(serverHost)
71 }
72 }
73
View as plain text