From 16a8edfdb7eca338d87e4de0359924bd27784b8d Mon Sep 17 00:00:00 2001 From: Brian Gustafson Date: Wed, 11 Oct 2017 18:12:50 -0700 Subject: [PATCH] Handle URL parsing errors (#308) Merges a change from the SDK, which is an attempt to track down issues such as #277. --- vendor/github.com/oracle/bmcs-go-sdk/Makefile | 52 ++++++------------- .../github.com/oracle/bmcs-go-sdk/request.go | 2 +- .../oracle/bmcs-go-sdk/url_builder.go | 24 +++++---- vendor/vendor.json | 6 +-- 4 files changed, 34 insertions(+), 50 deletions(-) diff --git a/vendor/github.com/oracle/bmcs-go-sdk/Makefile b/vendor/github.com/oracle/bmcs-go-sdk/Makefile index 1a540367c60..7b5701a0128 100644 --- a/vendor/github.com/oracle/bmcs-go-sdk/Makefile +++ b/vendor/github.com/oracle/bmcs-go-sdk/Makefile @@ -2,48 +2,28 @@ GOFMT_FILES?=$$(find . -name '*.go' | grep -v vendor) PACKAGE=github.com/oracle/bmcs-go-sdk default: fmt build + +deps: + go get github.com/kardianos/govendor + +fmt: + goimports -w -local ${PACKAGE} $(GOFMT_FILES) + build: test @go build ${PACKAGE} @go build ${PACKAGE}/cmd/obmc-container-clean -fmt: ;goimports -w -local ${PACKAGE} $(GOFMT_FILES) -test: unit_test acc_test -deps: - go get github.com/kardianos/govendor +test: + @DEBUG=true go test -v ${PACKAGE} + +acceptance_test: + @TEST=true go test -v ${PACKAGE}/acceptance-test acceptance_cover: @TEST=true go test -v -coverprofile=coverage.out -coverpkg ${PACKAGE} ${PACKAGE}/acceptance-test @go tool cover -html coverage.out -### `make unit_test run=TestResourceCore debug=1` -cmd := go test -ifdef run - cmd := $(cmd) -run $(run) -endif -ifdef debug - cmd := $(cmd) -v -endif -ifdef verbose - cmd := DEBUG=true $(cmd) -endif -unit_test: ;$(cmd) - - -### `make acc_test rec=identity_user debug=1 verbose=1` -cmd2 := TEST=true go test -ifdef debug - cmd2 := $(cmd2) -v -endif -ifdef verbose - cmd2 := DEBUG=true $(cmd2) -endif -ifdef rec - cmd2 := $(cmd2) -timeout 120m -tags "recording $(rec)" -endif -acc_test: ;$(cmd2) ${PACKAGE}/acceptance-test - -test_print: - @grep -ohi "TestRun.*$(test).*Tests" *.go - @grep -oh "Test.*\*testing.T" *.go | cut -d \( -f 1 - -.PHONY: build fmt test unit_test acc_test +record_acceptance_test: + @go test -v -timeout 120m -tags "recording all" ${PACKAGE}/acceptance-test + +.PHONY: build test regression_test acceptance_test record_acceptance_test diff --git a/vendor/github.com/oracle/bmcs-go-sdk/request.go b/vendor/github.com/oracle/bmcs-go-sdk/request.go index 3fba48c77fd..8e897532d0b 100644 --- a/vendor/github.com/oracle/bmcs-go-sdk/request.go +++ b/vendor/github.com/oracle/bmcs-go-sdk/request.go @@ -126,6 +126,6 @@ func (r *requestDetails) marshalURL(urlTemplate string, region string, urlFn url if q, e = r.marshalQueryString(); e != nil { return } - val = urlFn(urlTemplate, region, r.name, q, r.ids...) + val, e = urlFn(urlTemplate, region, r.name, q, r.ids...) return } diff --git a/vendor/github.com/oracle/bmcs-go-sdk/url_builder.go b/vendor/github.com/oracle/bmcs-go-sdk/url_builder.go index 29673ff5d18..430e9ef6e8b 100644 --- a/vendor/github.com/oracle/bmcs-go-sdk/url_builder.go +++ b/vendor/github.com/oracle/bmcs-go-sdk/url_builder.go @@ -3,13 +3,14 @@ package baremetal import ( + "errors" "fmt" "net/url" "regexp" "strconv" ) -type urlBuilderFn func(string, string, resourceName, url.Values, ...interface{}) string +type urlBuilderFn func(string, string, resourceName, url.Values, ...interface{}) (string, error) var urlTemplateReg = regexp.MustCompile(`^.*%s+.*%s+.*$`) @@ -21,25 +22,25 @@ func baseUrlHelper(urlTemplate string, service string, region string) string { return fmt.Sprintf(urlTemplate, service, region) } -func buildCoreURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) string { +func buildCoreURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) (string, error) { baseUrl := baseUrlHelper(urlTemplate, coreServiceAPI, region) urlStr := fmt.Sprintf("%s/%s/%s", baseUrl, coreServiceAPIVersion, resource) return buildURL(urlStr, query, ids...) } -func buildIdentityURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) string { +func buildIdentityURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) (string, error) { baseUrl := baseUrlHelper(urlTemplate, identityServiceAPI, region) urlStr := fmt.Sprintf("%s/%s/%s", baseUrl, identityServiceAPIVersion, resource) return buildURL(urlStr, query, ids...) } -func buildDatabaseURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) string { +func buildDatabaseURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) (string, error) { baseUrl := baseUrlHelper(urlTemplate, databaseServiceAPI, region) urlStr := fmt.Sprintf("%s/%s/%s", baseUrl, databaseServiceAPIVersion, resource) return buildURL(urlStr, query, ids...) } -func buildObjectStorageURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) string { +func buildObjectStorageURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) (string, error) { baseUrl := baseUrlHelper(urlTemplate, objectStorageServiceAPI, region) urlStr := fmt.Sprintf("%s/%s", baseUrl, resourceNamespaces) if resource == resourcePAR { @@ -48,20 +49,20 @@ func buildObjectStorageURL(urlTemplate string, region string, resource resourceN return buildURL(urlStr, query, ids...) } -func buildLoadBalancerURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) string { +func buildLoadBalancerURL(urlTemplate string, region string, resource resourceName, query url.Values, ids ...interface{}) (string, error) { baseUrl := baseUrlHelper(urlTemplate, loadBalancerServiceAPI, region) urlStr := fmt.Sprintf("%s/%s/%s", baseUrl, loadBalancerServiceAPIVersion, resource) return buildURL(urlStr, query, ids...) } -func buildURL(urlStr string, query url.Values, ids ...interface{}) string { +func buildURL(urlStr string, query url.Values, ids ...interface{}) (string, error) { const separator = "/" for _, id := range ids { var strVal string switch id := id.(type) { default: - panic("Unsupported type") + return "", errors.New("Unsupported type") case bool: strVal = strconv.FormatBool(id) case uint64: @@ -81,7 +82,10 @@ func buildURL(urlStr string, query url.Values, ids ...interface{}) string { urlStr += strVal } - u, _ := url.Parse(urlStr) + u, e := url.Parse(urlStr) + if e != nil { + return "", e + } if query != nil { q := u.Query() for key, vals := range query { @@ -93,6 +97,6 @@ func buildURL(urlStr string, query url.Values, ids ...interface{}) string { u.RawQuery += q.Encode() } - return u.String() + return u.String(), nil } diff --git a/vendor/vendor.json b/vendor/vendor.json index 3df2dea3145..3ebbb698246 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -2972,10 +2972,10 @@ "revisionTime": "2017-01-25T16:36:56Z" }, { - "checksumSHA1": "M7kHCtvIVj3qu7Ko0YK7E8hEups=", + "checksumSHA1": "0lB36Au95tRAfvQ8rA93XEz3tLk=", "path": "github.com/oracle/bmcs-go-sdk", - "revision": "8bd0f941051cb0b148782b962b81b5d4f510f30a", - "revisionTime": "2017-10-06T23:16:19Z" + "revision": "9482e75ceee221a25ad6edbbc5ca3f5657e4c371", + "revisionTime": "2017-10-12T00:22:16Z" }, { "checksumSHA1": "ImgLNIpeXsGjZGXw4rd+rwzQxpo=",