github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/vent/service/server_test.go (about) 1 // +build integration 2 3 package service_test 4 5 import ( 6 "fmt" 7 "net/http" 8 "net/http/httptest" 9 "os" 10 "sync" 11 "testing" 12 "time" 13 14 "github.com/hyperledger/burrow/integration" 15 "github.com/hyperledger/burrow/integration/rpctest" 16 "github.com/hyperledger/burrow/logging" 17 "github.com/hyperledger/burrow/vent/config" 18 "github.com/hyperledger/burrow/vent/service" 19 "github.com/hyperledger/burrow/vent/sqlsol" 20 "github.com/hyperledger/burrow/vent/test" 21 "github.com/hyperledger/burrow/vent/types" 22 "github.com/stretchr/testify/require" 23 ) 24 25 func TestServer(t *testing.T) { 26 kern, shutdown := integration.RunNode(t, rpctest.GenesisDoc, rpctest.PrivateAccounts) 27 defer shutdown() 28 t.Parallel() 29 30 t.Run("Group", func(t *testing.T) { 31 t.Run("Run", func(t *testing.T) { 32 // run consumer to listen to events 33 cfg := config.DefaultVentConfig() 34 35 // create test db 36 _, closeDB := test.NewTestDB(t, cfg) 37 defer closeDB() 38 39 cfg.SpecFileOrDirs = []string{os.Getenv("GOPATH") + "/src/github.com/hyperledger/burrow/vent/test/sqlsol_view.json"} 40 cfg.AbiFileOrDirs = []string{os.Getenv("GOPATH") + "/src/github.com/hyperledger/burrow/vent/test/EventsTest.abi"} 41 cfg.ChainAddress = kern.GRPCListenAddress().String() 42 43 log := logging.NewNoopLogger() 44 consumer := service.NewConsumer(cfg, log, make(chan types.EventData)) 45 projection, err := sqlsol.SpecLoader(cfg.SpecFileOrDirs, sqlsol.None) 46 47 var wg sync.WaitGroup 48 49 wg.Add(1) 50 go func() { 51 err := consumer.Run(projection, true) 52 require.NoError(t, err) 53 54 wg.Done() 55 }() 56 57 time.Sleep(2 * time.Second) 58 59 // setup test server 60 server := service.NewServer(cfg, log, consumer) 61 62 httpServer := httptest.NewServer(server) 63 defer httpServer.Close() 64 65 // call health endpoint should return OK 66 healthURL := fmt.Sprintf("%s/health", httpServer.URL) 67 68 resp, err := http.Get(healthURL) 69 require.NoError(t, err) 70 require.Equal(t, http.StatusOK, resp.StatusCode) 71 72 // shutdown consumer and wait for its end 73 consumer.Shutdown() 74 wg.Wait() 75 76 // call health endpoint again should return error 77 resp, err = http.Get(healthURL) 78 require.NoError(t, err) 79 require.Equal(t, http.StatusServiceUnavailable, resp.StatusCode) 80 }) 81 }) 82 }