Aurora endpoint may now be explicitly provided with or without protocol and with or without port.
This commit is contained in:
parent
ef421f60c3
commit
56b325ed80
3 changed files with 89 additions and 2 deletions
|
@ -267,6 +267,11 @@ func NewClient(options ...ClientOption) (*Client, error) {
|
|||
return nil, errors.New("Incomplete Options -- url, cluster.json, or Zookeeper address required")
|
||||
}
|
||||
|
||||
url, err = validateAndPopulateAuroraURL(url)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "unable to create realis object, invalid url")
|
||||
}
|
||||
|
||||
if config.jsonTransport {
|
||||
trans, err := newTJSONTransport(url, config.timeout, config)
|
||||
if err != nil {
|
||||
|
@ -359,7 +364,7 @@ func defaultTTransport(url string, timeout time.Duration, config *clientConfig)
|
|||
transport.TLSClientConfig = tlsConfig
|
||||
}
|
||||
|
||||
trans, err := thrift.NewTHttpClientWithOptions(url+"/api",
|
||||
trans, err := thrift.NewTHttpClientWithOptions(url,
|
||||
thrift.THttpClientOptions{Client: &http.Client{Timeout: timeout, Transport: &transport, Jar: jar}})
|
||||
|
||||
if err != nil {
|
||||
|
|
|
@ -63,7 +63,7 @@ func TestNonExistentEndpoint(t *testing.T) {
|
|||
Jitter: 0.1}
|
||||
|
||||
// Attempt to connect to a bad endpoint
|
||||
r, err := realis.NewClient(realis.SchedulerUrl("http://192.168.33.7:8081/doesntexist/"),
|
||||
r, err := realis.NewClient(realis.SchedulerUrl("http://doesntexist.com:8081/api"),
|
||||
realis.Timeout(200*time.Millisecond),
|
||||
realis.BackOff(backoff),
|
||||
)
|
||||
|
@ -155,6 +155,50 @@ func TestLeaderFromZK(t *testing.T) {
|
|||
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "http://192.168.33.7:8081", url)
|
||||
|
||||
}
|
||||
func TestInvalidAuroraURL(t *testing.T) {
|
||||
r, err := realis.NewClient(realis.SchedulerUrl("http://doesntexist.com:8081/apitest"))
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("test://doesntexist.com:8081"))
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("https://doesntexist.com:8081/testing/api"))
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, r)
|
||||
}
|
||||
|
||||
func TestValidAuroraURL(t *testing.T) {
|
||||
r, err := realis.NewClient(realis.SchedulerUrl("http://domain.com:8081/api"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("https://domain.com:8081/api"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("domain.com:8081"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("domain.com"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("192.168.33.7"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("192.168.33.7:8081"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
|
||||
r, err = realis.NewClient(realis.SchedulerUrl("192.168.33.7:8081/api"))
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, r)
|
||||
}
|
||||
|
||||
func TestRealisClient_ReestablishConn(t *testing.T) {
|
||||
|
|
38
util.go
38
util.go
|
@ -1,7 +1,11 @@
|
|||
package realis
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/paypal/gorealis/gen-go/apache/aurora"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var ActiveStates = make(map[aurora.ScheduleStatus]bool)
|
||||
|
@ -35,3 +39,37 @@ func init() {
|
|||
AwaitingPulseJobUpdateStates[status] = true
|
||||
}
|
||||
}
|
||||
|
||||
func validateAndPopulateAuroraURL(urlStr string) (string, error) {
|
||||
|
||||
// If no protocol defined, assume http
|
||||
if !(strings.HasPrefix(urlStr, "http") || strings.HasPrefix(urlStr, "https")) {
|
||||
urlStr = "http://" + urlStr
|
||||
}
|
||||
|
||||
u, err := url.Parse(urlStr)
|
||||
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "error parsing url")
|
||||
}
|
||||
|
||||
// If no path provided assume /api
|
||||
if u.Path == "" {
|
||||
u.Path = "/api"
|
||||
}
|
||||
|
||||
// If no port provided, assume default 8081
|
||||
if u.Port() == "" {
|
||||
u.Host = u.Host + ":8081"
|
||||
}
|
||||
|
||||
if !(u.Scheme == "http" || u.Scheme == "https") {
|
||||
return "", errors.Errorf("only protocols http and https are supported %v\n", u.Scheme)
|
||||
}
|
||||
|
||||
if u.Path != "/api" {
|
||||
return "", errors.Errorf("expected /api path %v\n", u.Path)
|
||||
}
|
||||
|
||||
return u.String(), nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue