diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 66c8de9..73e7b57 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -41,4 +41,4 @@ jobs: run: go build -v ./... - name: Test - run: go test -timeout 100s ./... \ No newline at end of file + run: go test -timeout 500s ./... \ No newline at end of file diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 9a1f8db..a996e9b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -33,7 +33,7 @@ jobs: run: go build -v ./... - name: Test - run: go test -timeout 100s -v ./... + run: go test -timeout 500s -v ./... - name: Create a release id: create_release diff --git a/pulsar/connector/client.go b/pulsar/connector/client.go index 35ec76a..78f0e23 100644 --- a/pulsar/connector/client.go +++ b/pulsar/connector/client.go @@ -79,12 +79,12 @@ func NewClient(options ...func(*PulsarClientOptions)) (Client, error) { if cfg == nil { return nil, fmt.Errorf("pulsar config is nil. use WithConfig to set it") } - retryAttempts := 5 + retryAttempts := 30 if clientOptions.retryAttempts != nil { retryAttempts = *clientOptions.retryAttempts } - retryMaxDelay := time.Second + retryMaxDelay := 2 * time.Second if clientOptions.retryMaxDelay != nil { retryMaxDelay = *clientOptions.retryMaxDelay } diff --git a/pulsar/connector/scripts/pulsar.sh b/pulsar/connector/scripts/pulsar.sh index e1699dc..769fa65 100755 --- a/pulsar/connector/scripts/pulsar.sh +++ b/pulsar/connector/scripts/pulsar.sh @@ -1,14 +1,9 @@ #!/bin/bash -cr='docker' -PODMAN_EXISTS=$(which podman) -RET_VAL=$? - -if [ $RET_VAL -eq '0' ]; then - echo "podman exists." +if command -v docker >/dev/null 2>&1; then + cr='docker' +elif command -v podman >/dev/null 2>&1; then cr='podman' -else - echo "podman does not exist. using docker" fi app_port=${2:-6650} # Use this as default port if no argument is provided @@ -20,6 +15,6 @@ app_port=%d admin_port=%d container_name=%s -echo "Starting pulsar on port $app_port and admin port $admin_port" +echo "Starting pulsar using $cr on port $app_port and admin port $admin_port" $cr run --name=$container_name -d -p $app_port:6650 -p $admin_port:8080 docker.io/apachepulsar/pulsar:2.11.0 bin/pulsar standalone diff --git a/pulsar/connector/scripts/pulsar_stop.sh b/pulsar/connector/scripts/pulsar_stop.sh index f8288df..6e710e1 100755 --- a/pulsar/connector/scripts/pulsar_stop.sh +++ b/pulsar/connector/scripts/pulsar_stop.sh @@ -1,11 +1,8 @@ #!/bin/bash -cr='docker' -PODMAN_EXISTS=$(which podman) -RET_VAL=$? - -if [ $RET_VAL -eq '0' ]; then - echo "podman exists." +if command -v docker >/dev/null 2>&1; then + cr='docker' +elif command -v podman >/dev/null 2>&1; then cr='podman' fi container_name=%s diff --git a/pulsar/connector/suite_test.go b/pulsar/connector/suite_test.go index 64168c3..4b40e25 100644 --- a/pulsar/connector/suite_test.go +++ b/pulsar/connector/suite_test.go @@ -286,11 +286,12 @@ func (suite *MainTestSuite) TestProduceMessage() { func (suite *MainTestSuite) startPulsar() { suite.T().Log("stopping existing pulsar container") - exec.Command("/bin/sh", "-c", pulsarStopCommand).Run() + exec.Command("/bin/sh", "-c", fmt.Sprintf(pulsarStopCommand, "basic-suite")).Run() time.Sleep(2 * time.Second) suite.T().Log("starting pulsar") out, err := exec.Command("/bin/sh", "-c", fmt.Sprintf(pulsarDockerCommand, pulsarClientPort, pulsarAdminPort, "basic-suite")).CombinedOutput() + suite.T().Logf("start script output:\n%s", string(out)) if err != nil { suite.FailNow("failed to start pulsar", err.Error(), string(out)) } @@ -299,17 +300,31 @@ func (suite *MainTestSuite) startPulsar() { suite.FailNow("failed to create request", err.Error()) } suite.T().Log("waiting for pulsar to start") - client := http.Client{} - for i := 0; i < 40; i++ { + client := http.Client{Timeout: 5 * time.Second} + var lastErr error + for i := 0; i < 120; i++ { resp, err := client.Do(req) - if err == nil && resp.StatusCode == http.StatusOK { - suite.T().Log("pulsar started") + if err == nil { + if resp.StatusCode == http.StatusOK { + suite.T().Log("pulsar started") + resp.Body.Close() + return + } + lastErr = fmt.Errorf("unexpected status code: %d", resp.StatusCode) resp.Body.Close() - return + } else { + lastErr = err + } + if i%10 == 0 { + suite.T().Logf("waiting for pulsar... attempt %d/120, last error: %v", i, lastErr) } time.Sleep(2 * time.Second) } - suite.FailNow("failed to start pulsar") + dockerPs, _ := exec.Command("/bin/sh", "-c", "docker ps -a 2>&1").CombinedOutput() + dockerLogs, _ := exec.Command("/bin/sh", "-c", "docker logs --tail 50 basic-suite 2>&1").CombinedOutput() + podmanPs, _ := exec.Command("/bin/sh", "-c", "podman ps -a 2>&1").CombinedOutput() + podmanLogs, _ := exec.Command("/bin/sh", "-c", "podman logs --tail 50 basic-suite 2>&1").CombinedOutput() + suite.FailNow("failed to start pulsar", fmt.Sprintf("last error: %v\ndocker ps:\n%s\ndocker logs:\n%s\npodman ps:\n%s\npodman logs:\n%s", lastErr, string(dockerPs), string(dockerLogs), string(podmanPs), string(podmanLogs))) } func loadJson[T any](jsonBytes []byte) T { diff --git a/pulsar/test/scripts/pulsar.sh b/pulsar/test/scripts/pulsar.sh index e1699dc..769fa65 100755 --- a/pulsar/test/scripts/pulsar.sh +++ b/pulsar/test/scripts/pulsar.sh @@ -1,14 +1,9 @@ #!/bin/bash -cr='docker' -PODMAN_EXISTS=$(which podman) -RET_VAL=$? - -if [ $RET_VAL -eq '0' ]; then - echo "podman exists." +if command -v docker >/dev/null 2>&1; then + cr='docker' +elif command -v podman >/dev/null 2>&1; then cr='podman' -else - echo "podman does not exist. using docker" fi app_port=${2:-6650} # Use this as default port if no argument is provided @@ -20,6 +15,6 @@ app_port=%d admin_port=%d container_name=%s -echo "Starting pulsar on port $app_port and admin port $admin_port" +echo "Starting pulsar using $cr on port $app_port and admin port $admin_port" $cr run --name=$container_name -d -p $app_port:6650 -p $admin_port:8080 docker.io/apachepulsar/pulsar:2.11.0 bin/pulsar standalone diff --git a/pulsar/test/scripts/pulsar_stop.sh b/pulsar/test/scripts/pulsar_stop.sh index f8288df..6e710e1 100755 --- a/pulsar/test/scripts/pulsar_stop.sh +++ b/pulsar/test/scripts/pulsar_stop.sh @@ -1,11 +1,8 @@ #!/bin/bash -cr='docker' -PODMAN_EXISTS=$(which podman) -RET_VAL=$? - -if [ $RET_VAL -eq '0' ]; then - echo "podman exists." +if command -v docker >/dev/null 2>&1; then + cr='docker' +elif command -v podman >/dev/null 2>&1; then cr='podman' fi container_name=%s diff --git a/pulsar/test/suite.go b/pulsar/test/suite.go index 6fb85b9..9aac7b3 100644 --- a/pulsar/test/suite.go +++ b/pulsar/test/suite.go @@ -128,7 +128,7 @@ func findFreePort(rangeStart, rangeEnd int) (int, error) { func (suite *PulsarTestSuite) startPulsar(contName string) { suite.T().Log("stopping existing pulsar container") - exec.Command("/bin/sh", "-c", pulsarStopCommand).Run() + exec.Command("/bin/sh", "-c", fmt.Sprintf(pulsarStopCommand, contName)).Run() suite.T().Log("starting pulsar") pulsarAppPort, err := findFreePort(suite.AppPortStart, suite.AppPortStart+100) @@ -153,13 +153,14 @@ func (suite *PulsarTestSuite) startPulsar(contName string) { suite.FailNow("failed to start pulsar", err.Error(), string(out)) } suite.T().Log("waiting for pulsar to start") - for i := 0; i < 30; i++ { + for i := 0; i < 120; i++ { isAlive := suite.checkPulsarIsAlive() if isAlive { return } time.Sleep(2 * time.Second) } + logs, _ := exec.Command("/bin/sh", "-c", fmt.Sprintf("docker logs --tail 50 %s || podman logs --tail 50 %s", contName, contName)).CombinedOutput() formmatedScript := fmt.Sprintf(pulsarStopCommand, contName) outbytes, err := exec.Command("/bin/sh", "-c", formmatedScript).CombinedOutput() if err != nil { @@ -167,5 +168,5 @@ func (suite *PulsarTestSuite) startPulsar(contName string) { } killPortProcess(suite.AppPortStart) killPortProcess(suite.AdminPortStart) - suite.FailNow("failed to start pulsar") + suite.FailNow("failed to start pulsar", fmt.Sprintf("container logs:\n%s", string(logs))) }