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 }