github.com/rudderlabs/rudder-go-kit@v0.30.0/testhelper/docker/resource/pulsar/pulsar.go (about)

     1  package pulsar
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  
     7  	"github.com/ory/dockertest/v3"
     8  
     9  	"github.com/rudderlabs/rudder-go-kit/testhelper/docker/resource"
    10  )
    11  
    12  type Resource struct {
    13  	URL      string
    14  	AdminURL string
    15  }
    16  
    17  func Setup(pool *dockertest.Pool, d resource.Cleaner, opts ...Opt) (*Resource, error) {
    18  	c := &Config{
    19  		Tag: "3.1.2",
    20  	}
    21  	for _, opt := range opts {
    22  		opt(c)
    23  	}
    24  	cmd := []string{"bin/pulsar", "standalone"}
    25  
    26  	pulsarContainer, err := pool.RunWithOptions(&dockertest.RunOptions{
    27  		Repository:   "apachepulsar/pulsar",
    28  		Tag:          c.Tag,
    29  		Env:          []string{},
    30  		ExposedPorts: []string{"6650", "8080"},
    31  		Cmd:          cmd,
    32  	})
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	d.Cleanup(func() {
    38  		if err := pool.Purge(pulsarContainer); err != nil {
    39  			d.Log("Could not purge resource:", err)
    40  		}
    41  	})
    42  
    43  	url := fmt.Sprintf("pulsar://localhost:%s", pulsarContainer.GetPort("6650/tcp"))
    44  	adminURL := fmt.Sprintf("http://localhost:%s", pulsarContainer.GetPort("8080/tcp"))
    45  
    46  	if err := pool.Retry(func() (err error) {
    47  		var w bytes.Buffer
    48  		code, err := pulsarContainer.Exec([]string{"sh", "-c", "curl -I http://localhost:8080/admin/v2/namespaces/public/default | grep '200' || exit 1"}, dockertest.ExecOptions{StdOut: &w, StdErr: &w})
    49  		if err != nil {
    50  			return err
    51  		}
    52  		if code != 0 {
    53  			return fmt.Errorf("pulsar healthcheck failed")
    54  		}
    55  		return nil
    56  	}); err != nil {
    57  		return nil, err
    58  	}
    59  	return &Resource{
    60  		URL:      url,
    61  		AdminURL: adminURL,
    62  	}, nil
    63  }