1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_target_runner-go: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker-- 4*61c4878aSAndroid Build Coastguard WorkerGo 5*61c4878aSAndroid Build Coastguard Worker-- 6*61c4878aSAndroid Build Coastguard Worker.. pigweed-module-subpage:: 7*61c4878aSAndroid Build Coastguard Worker :name: pw_target_runner 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard WorkerServer 10*61c4878aSAndroid Build Coastguard Worker------ 11*61c4878aSAndroid Build Coastguard Worker 12*61c4878aSAndroid Build Coastguard Worker.. TODO(frolv): Build and host documentation using godoc and link to it. 13*61c4878aSAndroid Build Coastguard Worker 14*61c4878aSAndroid Build Coastguard WorkerFull API documentation for the server library can be found here. 15*61c4878aSAndroid Build Coastguard Worker 16*61c4878aSAndroid Build Coastguard WorkerExample program 17*61c4878aSAndroid Build Coastguard Worker^^^^^^^^^^^^^^^ 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard WorkerThe code below implements a very basic test server with two test workers which 20*61c4878aSAndroid Build Coastguard Workerprint out the path of the tests they are scheduled to run. 21*61c4878aSAndroid Build Coastguard Worker 22*61c4878aSAndroid Build Coastguard Worker.. code-block:: go 23*61c4878aSAndroid Build Coastguard Worker 24*61c4878aSAndroid Build Coastguard Worker package main 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Worker import ( 27*61c4878aSAndroid Build Coastguard Worker "flag" 28*61c4878aSAndroid Build Coastguard Worker "log" 29*61c4878aSAndroid Build Coastguard Worker 30*61c4878aSAndroid Build Coastguard Worker pb "pigweed/proto/pw_target_runner/target_runner_pb" 31*61c4878aSAndroid Build Coastguard Worker "pigweed/pw_target_runner" 32*61c4878aSAndroid Build Coastguard Worker ) 33*61c4878aSAndroid Build Coastguard Worker 34*61c4878aSAndroid Build Coastguard Worker // Custom test worker that implements the interface server.UnitTestRunner. 35*61c4878aSAndroid Build Coastguard Worker type MyWorker struct { 36*61c4878aSAndroid Build Coastguard Worker id int 37*61c4878aSAndroid Build Coastguard Worker } 38*61c4878aSAndroid Build Coastguard Worker 39*61c4878aSAndroid Build Coastguard Worker func (w *MyWorker) WorkerStart() error { 40*61c4878aSAndroid Build Coastguard Worker log.Printf("Starting test worker %d\n", w.id) 41*61c4878aSAndroid Build Coastguard Worker return nil 42*61c4878aSAndroid Build Coastguard Worker } 43*61c4878aSAndroid Build Coastguard Worker 44*61c4878aSAndroid Build Coastguard Worker func (w *MyWorker) WorkerExit() { 45*61c4878aSAndroid Build Coastguard Worker log.Printf("Exiting test worker %d\n", w.id) 46*61c4878aSAndroid Build Coastguard Worker } 47*61c4878aSAndroid Build Coastguard Worker 48*61c4878aSAndroid Build Coastguard Worker func (w *MyWorker) HandleRunRequest(req *server.UnitTestRunRequest) *server.UnitTestRunResponse { 49*61c4878aSAndroid Build Coastguard Worker log.Printf("Worker %d running unit test %s\n", w.id, req.Path) 50*61c4878aSAndroid Build Coastguard Worker return &server.UnitTestRunResponse{ 51*61c4878aSAndroid Build Coastguard Worker Output: []byte("Success!"), 52*61c4878aSAndroid Build Coastguard Worker Status: pb.TestStatus_SUCCESS, 53*61c4878aSAndroid Build Coastguard Worker } 54*61c4878aSAndroid Build Coastguard Worker } 55*61c4878aSAndroid Build Coastguard Worker 56*61c4878aSAndroid Build Coastguard Worker // To run: 57*61c4878aSAndroid Build Coastguard Worker // 58*61c4878aSAndroid Build Coastguard Worker // $ go build -o server 59*61c4878aSAndroid Build Coastguard Worker // $ ./server -port 80 60*61c4878aSAndroid Build Coastguard Worker // 61*61c4878aSAndroid Build Coastguard Worker func main() { 62*61c4878aSAndroid Build Coastguard Worker port := flag.Int("port", 8080, "Port on which to run server") 63*61c4878aSAndroid Build Coastguard Worker flag.Parse() 64*61c4878aSAndroid Build Coastguard Worker 65*61c4878aSAndroid Build Coastguard Worker s := server.New() 66*61c4878aSAndroid Build Coastguard Worker 67*61c4878aSAndroid Build Coastguard Worker // Create and register as many unit test workers as you need. 68*61c4878aSAndroid Build Coastguard Worker s.RegisterWorker(&MyWorker{id: 0}) 69*61c4878aSAndroid Build Coastguard Worker s.RegisterWorker(&MyWorker{id: 1}) 70*61c4878aSAndroid Build Coastguard Worker 71*61c4878aSAndroid Build Coastguard Worker if err := s.Bind(*port); err != nil { 72*61c4878aSAndroid Build Coastguard Worker log.Fatalf("Failed to bind to port %d: %v", *port, err) 73*61c4878aSAndroid Build Coastguard Worker } 74*61c4878aSAndroid Build Coastguard Worker 75*61c4878aSAndroid Build Coastguard Worker if err := s.Serve(); err != nil { 76*61c4878aSAndroid Build Coastguard Worker log.Fatalf("Failed to start server: %v", err) 77*61c4878aSAndroid Build Coastguard Worker } 78*61c4878aSAndroid Build Coastguard Worker } 79