From d95a6497d5ba58e67303bf3e07c8c3c0ae14ab95 Mon Sep 17 00:00:00 2001 From: s8sg Date: Sun, 16 Jul 2023 12:24:52 +0700 Subject: [PATCH] Junk files Signed-off-by: s8sg --- Makefile | 35 +++++++++++++++++++---- integration-test/test_goflow.go | 2 ++ runtime/router.go | 1 + samples/examples.go | 36 +++++++++++++----------- samples/examples_test.go | 50 +++++++++++++++++++++++++++++++++ v1/goflow.go | 1 - 6 files changed, 103 insertions(+), 22 deletions(-) create mode 100644 integration-test/test_goflow.go create mode 100644 samples/examples_test.go diff --git a/Makefile b/Makefile index 6e9e744..92ebdb2 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,38 @@ +INTEGRATION_TEST_PATH?=./integration-test +EXAMPLES_PATH?=./samples + .PHONY: build -all: coverage +all: build coverage + +build: | __go-pkg-list + @go build --ldflags "-s -w" -a -installsuffix cgo ${GO_PKG_LIST} ## coverage: Generate global code coverage report .PHONY: coverage -coverage: | __go-pkg-list - @go test -gcflags=-l -v ${GO_PKG_LIST} -coverprofile /tmp/pls_cp.out || true +coverage: | __go-pkg-list unit integration @go tool cover -html=/tmp/pls_cp.out -o /tmp/coverage.html @echo "You can find coverage report at /tmp/coverage.html" + +## coverage: Generate global code coverage report +.PHONY: unit +test.unit: | __go-pkg-list + @go test -tags=unit -gcflags=-l -v ${GO_PKG_LIST} -coverprofile /tmp/pls_cp.out + + +## Run integration test +.PHONY: integration +test.integration: + go test -tags=integration $(INTEGRATION_TEST_PATH) $(EXAMPLES_PATH) -count=1 -v -coverprofile /tmp/pls_cp.out + +## docker.start: Starts docker compose +docker.start: + @docker-compose up -d + +## docker.start: Starts docker compose +docker.stop: + @docker-compose down + __go-pkg-list: ifeq ($(origin GO_PKG_LIST), undefined) - $(eval GO_PKG_LIST ?= $(shell go list ./... | grep -v /doc/ | grep -v /template/ | grep -v /vendor/)) -endif + $(eval GO_PKG_LIST ?= $(shell go list ./... | grep -v /doc/ | grep -v /template/ | grep -v /vendor/ | grep -v samples | grep -v integration-test)) +endif \ No newline at end of file diff --git a/integration-test/test_goflow.go b/integration-test/test_goflow.go new file mode 100644 index 0000000..a6bea40 --- /dev/null +++ b/integration-test/test_goflow.go @@ -0,0 +1,2 @@ +package test + diff --git a/runtime/router.go b/runtime/router.go index 3ffc6bd..4622263 100644 --- a/runtime/router.go +++ b/runtime/router.go @@ -32,6 +32,7 @@ func Router(fRuntime *FlowRuntime) http.Handler { router.POST("flow/:"+FlowNameParamName+"/request/resume:"+RequestIdParamName, resumeRequestHandler(fRuntime)) router.POST("flow/:"+FlowNameParamName+"/request/state:"+RequestIdParamName, requestStateHandler(fRuntime)) router.POST("flow/:"+FlowNameParamName+"/request/list", requestListHandler(fRuntime)) + // TODO: Add health check endpoint return router } diff --git a/samples/examples.go b/samples/examples.go index 6920dbc..322ca5a 100644 --- a/samples/examples.go +++ b/samples/examples.go @@ -12,21 +12,25 @@ import ( goflow "github.com/s8sg/goflow/v1" ) +func GetFlowService() *goflow.FlowService { + fs := &goflow.FlowService{ + Port: 8080, + RedisURL: "localhost:6379", + RedisPassword: "redis", + OpenTraceUrl: "localhost:5775", + WorkerConcurrency: 5, + EnableMonitoring: true, + DebugEnabled: true, + } + fs.Register("single", single.DefineWorkflow) + fs.Register("serial", serial.DefineWorkflow) + fs.Register("parallel", parallel.DefineWorkflow) + fs.Register("condition", condition.DefineWorkflow) + fs.Register("loop", loop.DefineWorkflow) + fs.Register("myflow", myflow.DefineWorkflow) + return fs +} + func main() { - fs := &goflow.FlowService{ - Port: 8080, - RedisURL: "localhost:6379", - RedisPassword: "redis", - OpenTraceUrl: "localhost:5775", - WorkerConcurrency: 5, - EnableMonitoring: true, - DebugEnabled: true, - } - fs.Register("single", single.DefineWorkflow) - fs.Register("serial", serial.DefineWorkflow) - fs.Register("parallel", parallel.DefineWorkflow) - fs.Register("condition", condition.DefineWorkflow) - fs.Register("loop", loop.DefineWorkflow) - fs.Register("myflow", myflow.DefineWorkflow) - fmt.Println(fs.Start()) + fmt.Println(GetFlowService().Start()) } diff --git a/samples/examples_test.go b/samples/examples_test.go new file mode 100644 index 0000000..c45d3aa --- /dev/null +++ b/samples/examples_test.go @@ -0,0 +1,50 @@ +package main + +import ( +"testing" +"net/http" +"github.com/stretchr/testify/assert" +"time" +"log" +) + + + +func runExamplesServer() { + go func() { + fs := GetFlowService() + log.Fatalf(fs.Start().Error()) + }() +} + +func waitForServer() { + backoff := 50 * time.Millisecond + log.Printf("waiting for server to start") + for i := 0; i < 10; i++ { + // TODO: Add health check endpoint + _, err := http.Get("http://localhost:8080/flow/single") + if err != nil { + time.Sleep(backoff) + continue + } + log.Printf("server started") + return + } + log.Fatalf("Server on localhost:8080 not up after 10 attempts") +} + + +func Test_single_flow_execution(t *testing.T) { + runExamplesServer() + waitForServer() + + t.Run("it should return 200 when executing single flow", func(t *testing.T) { + resp, err := http.Get("http://localhost:8080/flow/single") + + if err != nil { + t.Fatalf("Expected no error, got %v", err) + } + + assert.Equal(t, 200, resp.StatusCode) + }) +} \ No newline at end of file diff --git a/v1/goflow.go b/v1/goflow.go index 03b4dea..4ba45ec 100644 --- a/v1/goflow.go +++ b/v1/goflow.go @@ -238,7 +238,6 @@ func (fs *FlowService) StartServer() error { if err := fs.initRuntime(); err != nil { return err } - go fs.runtimeWorker(errorChan) go fs.server(errorChan) err := <-errorChan return fmt.Errorf("server has stopped, error: %v", err)