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")
|
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 {
|
if config.jsonTransport {
|
||||||
trans, err := newTJSONTransport(url, config.timeout, config)
|
trans, err := newTJSONTransport(url, config.timeout, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -359,7 +364,7 @@ func defaultTTransport(url string, timeout time.Duration, config *clientConfig)
|
||||||
transport.TLSClientConfig = tlsConfig
|
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}})
|
thrift.THttpClientOptions{Client: &http.Client{Timeout: timeout, Transport: &transport, Jar: jar}})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -63,7 +63,7 @@ func TestNonExistentEndpoint(t *testing.T) {
|
||||||
Jitter: 0.1}
|
Jitter: 0.1}
|
||||||
|
|
||||||
// Attempt to connect to a bad endpoint
|
// 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.Timeout(200*time.Millisecond),
|
||||||
realis.BackOff(backoff),
|
realis.BackOff(backoff),
|
||||||
)
|
)
|
||||||
|
@ -155,6 +155,50 @@ func TestLeaderFromZK(t *testing.T) {
|
||||||
|
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "http://192.168.33.7:8081", url)
|
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) {
|
func TestRealisClient_ReestablishConn(t *testing.T) {
|
||||||
|
|
38
util.go
38
util.go
|
@ -1,7 +1,11 @@
|
||||||
package realis
|
package realis
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/paypal/gorealis/gen-go/apache/aurora"
|
"github.com/paypal/gorealis/gen-go/apache/aurora"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ActiveStates = make(map[aurora.ScheduleStatus]bool)
|
var ActiveStates = make(map[aurora.ScheduleStatus]bool)
|
||||||
|
@ -35,3 +39,37 @@ func init() {
|
||||||
AwaitingPulseJobUpdateStates[status] = true
|
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