diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0c5a06f7..9d4aae5a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,4 +30,4 @@ jobs: - name: Lint Code uses: golangci/golangci-lint-action@v2 with: - args: --timeout ${{ env.GOLANGCI_TIMEOUT }} --issues-exit-code=0 ./client/... + args: --timeout ${{ env.GOLANGCI_TIMEOUT }} diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..96ec11d1 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,34 @@ +linters-settings: + misspell: + locale: US + +linters: + enable: + - asciicheck + - deadcode + - errcheck + - errorlint + - gofmt + - gofumpt + - goimports + - gosec + - gosimple + - govet + - ineffassign + - makezero + - misspell + - nilerr + - noctx + - predeclared + - staticcheck + - structcheck + - typecheck + - unconvert + - unparam + - unused + - varcheck + - wastedassign + disable-all: true +issues: + max-issues-per-linter: 0 + max-same-issues: 0 diff --git a/Makefile b/Makefile index 3b682368..a6888f8b 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,6 @@ DOCKER_NGINX_PLUS?=nginx-plus DOCKER_NGINX_PLUS_HELPER?=nginx-plus-helper GOLANG_CONTAINER=golang:1.16 -GOLANGCI_CONTAINER=golangci/golangci-lint:latest export TEST_API_ENDPOINT=http://$(DOCKER_NGINX_PLUS):8080/api export TEST_API_ENDPOINT_OF_HELPER=http://$(DOCKER_NGINX_PLUS_HELPER):8080/api @@ -15,10 +14,7 @@ export TEST_UNAVAILABLE_STREAM_ADDRESS=$(DOCKER_NGINX_PLUS):8081 test: docker-build run-nginx-plus test-run configure-no-stream-block test-run-no-stream-block clean lint: - docker run --rm \ - -v $(shell pwd):/go/src/github.com/nginxinc/nginx-plus-go-client \ - -w /go/src/github.com/nginxinc/nginx-plus-go-client \ - $(GOLANGCI_CONTAINER) golangci-lint run + docker run --pull always --rm -v $(shell pwd):/nginx-plus-go-client -w /nginx-plus-go-client -v $(shell go env GOCACHE):/cache/go -e GOCACHE=/cache/go -e GOLANGCI_LINT_CACHE=/cache/go -v $(shell go env GOPATH)/pkg:/go/pkg golangci/golangci-lint:latest golangci-lint --color always run docker-build: docker build --secret id=nginx-repo.crt,src=docker/nginx-repo.crt --secret id=nginx-repo.key,src=docker/nginx-repo.key --build-arg NGINX_PLUS_VERSION=$(NGINX_PLUS_VERSION) -t $(NGINX_IMAGE) docker diff --git a/client/nginx.go b/client/nginx.go index fb737e90..7d481c12 100644 --- a/client/nginx.go +++ b/client/nginx.go @@ -2,6 +2,7 @@ package client import ( "bytes" + "context" "encoding/json" "errors" "fmt" @@ -10,6 +11,7 @@ import ( "net/http" "reflect" "strings" + "time" ) const ( @@ -421,14 +423,14 @@ func NewNginxClient(httpClient *http.Client, apiEndpoint string) (*NginxClient, return NewNginxClientWithVersion(httpClient, apiEndpoint, APIVersion) } -//NewNginxClientWithVersion creates an NginxClient with the given version of NGINX Plus API. +// NewNginxClientWithVersion creates an NginxClient with the given version of NGINX Plus API. func NewNginxClientWithVersion(httpClient *http.Client, apiEndpoint string, version int) (*NginxClient, error) { if !versionSupported(version) { return nil, fmt.Errorf("API version %v is not supported by the client", version) } versions, err := getAPIVersions(httpClient, apiEndpoint) if err != nil { - return nil, fmt.Errorf("error accessing the API: %v", err) + return nil, fmt.Errorf("error accessing the API: %w", err) } found := false for _, v := range *versions { @@ -457,11 +459,17 @@ func versionSupported(n int) bool { } func getAPIVersions(httpClient *http.Client, endpoint string) (*versions, error) { - resp, err := httpClient.Get(endpoint) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil) if err != nil { - return nil, fmt.Errorf("%v is not accessible: %v", endpoint, err) + return nil, fmt.Errorf("failed to create a get request: %w", err) + } + resp, err := httpClient.Do(req) + if err != nil { + return nil, fmt.Errorf("%v is not accessible: %w", endpoint, err) } - defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf("%v is not accessible: expected %v response, got %v", endpoint, http.StatusOK, resp.StatusCode) @@ -469,13 +477,13 @@ func getAPIVersions(httpClient *http.Client, endpoint string) (*versions, error) body, err := ioutil.ReadAll(resp.Body) if err != nil { - return nil, fmt.Errorf("error while reading body of the response: %v", err) + return nil, fmt.Errorf("error while reading body of the response: %w", err) } var vers versions err = json.Unmarshal(body, &vers) if err != nil { - return nil, fmt.Errorf("error unmarshalling versions, got %q response: %v", string(body), err) + return nil, fmt.Errorf("error unmarshalling versions, got %q response: %w", string(body), err) } return &vers, nil @@ -498,13 +506,13 @@ func createResponseMismatchError(respBody io.ReadCloser) *internalError { func readAPIErrorResponse(respBody io.ReadCloser) (*apiErrorResponse, error) { body, err := ioutil.ReadAll(respBody) if err != nil { - return nil, fmt.Errorf("failed to read the response body: %v", err) + return nil, fmt.Errorf("failed to read the response body: %w", err) } var apiErr apiErrorResponse err = json.Unmarshal(body, &apiErr) if err != nil { - return nil, fmt.Errorf("error unmarshalling apiErrorResponse: got %q response: %v", string(body), err) + return nil, fmt.Errorf("error unmarshalling apiErrorResponse: got %q response: %w", string(body), err) } return &apiErr, nil @@ -523,7 +531,7 @@ func (client *NginxClient) GetHTTPServers(upstream string) ([]UpstreamServer, er var servers []UpstreamServer err := client.get(path, &servers) if err != nil { - return nil, fmt.Errorf("failed to get the HTTP servers of upstream %v: %v", upstream, err) + return nil, fmt.Errorf("failed to get the HTTP servers of upstream %v: %w", upstream, err) } return servers, nil @@ -533,7 +541,7 @@ func (client *NginxClient) GetHTTPServers(upstream string) ([]UpstreamServer, er func (client *NginxClient) AddHTTPServer(upstream string, server UpstreamServer) error { id, err := client.getIDOfHTTPServer(upstream, server.Server) if err != nil { - return fmt.Errorf("failed to add %v server to %v upstream: %v", server.Server, upstream, err) + return fmt.Errorf("failed to add %v server to %v upstream: %w", server.Server, upstream, err) } if id != -1 { return fmt.Errorf("failed to add %v server to %v upstream: server already exists", server.Server, upstream) @@ -542,7 +550,7 @@ func (client *NginxClient) AddHTTPServer(upstream string, server UpstreamServer) path := fmt.Sprintf("http/upstreams/%v/servers/", upstream) err = client.post(path, &server) if err != nil { - return fmt.Errorf("failed to add %v server to %v upstream: %v", server.Server, upstream, err) + return fmt.Errorf("failed to add %v server to %v upstream: %w", server.Server, upstream, err) } return nil @@ -552,7 +560,7 @@ func (client *NginxClient) AddHTTPServer(upstream string, server UpstreamServer) func (client *NginxClient) DeleteHTTPServer(upstream string, server string) error { id, err := client.getIDOfHTTPServer(upstream, server) if err != nil { - return fmt.Errorf("failed to remove %v server from %v upstream: %v", server, upstream, err) + return fmt.Errorf("failed to remove %v server from %v upstream: %w", server, upstream, err) } if id == -1 { return fmt.Errorf("failed to remove %v server from %v upstream: server doesn't exist", server, upstream) @@ -561,7 +569,7 @@ func (client *NginxClient) DeleteHTTPServer(upstream string, server string) erro path := fmt.Sprintf("http/upstreams/%v/servers/%v", upstream, id) err = client.delete(path, http.StatusOK) if err != nil { - return fmt.Errorf("failed to remove %v server from %v upstream: %v", server, upstream, err) + return fmt.Errorf("failed to remove %v server from %v upstream: %w", server, upstream, err) } return nil @@ -574,7 +582,7 @@ func (client *NginxClient) DeleteHTTPServer(upstream string, server string) erro func (client *NginxClient) UpdateHTTPServers(upstream string, servers []UpstreamServer) (added []UpstreamServer, deleted []UpstreamServer, updated []UpstreamServer, err error) { serversInNginx, err := client.GetHTTPServers(upstream) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %w", upstream, err) } // We assume port 80 if no port is set for servers. @@ -589,21 +597,21 @@ func (client *NginxClient) UpdateHTTPServers(upstream string, servers []Upstream for _, server := range toAdd { err := client.AddHTTPServer(upstream, server) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %w", upstream, err) } } for _, server := range toDelete { err := client.DeleteHTTPServer(upstream, server.Server) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %w", upstream, err) } } for _, server := range toUpdate { err := client.UpdateHTTPServer(upstream, server) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update servers of %v upstream: %w", upstream, err) } } @@ -692,7 +700,7 @@ func determineUpdates(updatedServers []UpstreamServer, nginxServers []UpstreamSe func (client *NginxClient) getIDOfHTTPServer(upstream string, name string) (int, error) { servers, err := client.GetHTTPServers(upstream) if err != nil { - return -1, fmt.Errorf("error getting id of server %v of upstream %v: %v", name, upstream, err) + return -1, fmt.Errorf("error getting id of server %v of upstream %v: %w", name, upstream, err) } for _, s := range servers { @@ -705,12 +713,20 @@ func (client *NginxClient) getIDOfHTTPServer(upstream string, name string) (int, } func (client *NginxClient) get(path string, data interface{}) error { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + url := fmt.Sprintf("%v/%v/%v", client.apiEndpoint, client.version, path) - resp, err := client.httpClient.Get(url) + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { - return fmt.Errorf("failed to get %v: %v", path, err) + return fmt.Errorf("failed to create a get request: %w", err) + } + + resp, err := client.httpClient.Do(req) + if err != nil { + return fmt.Errorf("failed to get %v: %w", path, err) } - defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return createResponseMismatchError(resp.Body).Wrap(fmt.Sprintf( "expected %v response, got %v", @@ -719,29 +735,37 @@ func (client *NginxClient) get(path string, data interface{}) error { body, err := ioutil.ReadAll(resp.Body) if err != nil { - return fmt.Errorf("failed to read the response body: %v", err) + return fmt.Errorf("failed to read the response body: %w", err) } err = json.Unmarshal(body, data) if err != nil { - return fmt.Errorf("error unmarshaling response %q: %v", string(body), err) + return fmt.Errorf("error unmarshaling response %q: %w", string(body), err) } return nil } func (client *NginxClient) post(path string, input interface{}) error { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + url := fmt.Sprintf("%v/%v/%v", client.apiEndpoint, client.version, path) jsonInput, err := json.Marshal(input) if err != nil { - return fmt.Errorf("failed to marshall input: %v", err) + return fmt.Errorf("failed to marshall input: %w", err) } - resp, err := client.httpClient.Post(url, "application/json", bytes.NewBuffer(jsonInput)) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewBuffer(jsonInput)) if err != nil { - return fmt.Errorf("failed to post %v: %v", path, err) + return fmt.Errorf("failed to create a post request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + + resp, err := client.httpClient.Do(req) + if err != nil { + return fmt.Errorf("failed to post %v: %w", path, err) } - defer resp.Body.Close() if resp.StatusCode != http.StatusCreated { return createResponseMismatchError(resp.Body).Wrap(fmt.Sprintf( "expected %v response, got %v", @@ -752,19 +776,20 @@ func (client *NginxClient) post(path string, input interface{}) error { } func (client *NginxClient) delete(path string, expectedStatusCode int) error { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + path = fmt.Sprintf("%v/%v/%v/", client.apiEndpoint, client.version, path) - req, err := http.NewRequest(http.MethodDelete, path, nil) + req, err := http.NewRequestWithContext(ctx, http.MethodDelete, path, nil) if err != nil { - return fmt.Errorf("failed to create a delete request: %v", err) + return fmt.Errorf("failed to create a delete request: %w", err) } resp, err := client.httpClient.Do(req) if err != nil { - return fmt.Errorf("failed to create delete request: %v", err) + return fmt.Errorf("failed to create delete request: %w", err) } - defer resp.Body.Close() - if resp.StatusCode != expectedStatusCode { return createResponseMismatchError(resp.Body).Wrap(fmt.Sprintf( "failed to complete delete request: expected %v response, got %v", @@ -774,21 +799,24 @@ func (client *NginxClient) delete(path string, expectedStatusCode int) error { } func (client *NginxClient) patch(path string, input interface{}, expectedStatusCode int) error { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + path = fmt.Sprintf("%v/%v/%v/", client.apiEndpoint, client.version, path) jsonInput, err := json.Marshal(input) if err != nil { - return fmt.Errorf("failed to marshall input: %v", err) + return fmt.Errorf("failed to marshall input: %w", err) } - req, err := http.NewRequest(http.MethodPatch, path, bytes.NewBuffer(jsonInput)) + req, err := http.NewRequestWithContext(ctx, http.MethodPatch, path, bytes.NewBuffer(jsonInput)) if err != nil { - return fmt.Errorf("failed to create a patch request: %v", err) + return fmt.Errorf("failed to create a patch request: %w", err) } resp, err := client.httpClient.Do(req) if err != nil { - return fmt.Errorf("failed to create patch request: %v", err) + return fmt.Errorf("failed to create patch request: %w", err) } defer resp.Body.Close() @@ -813,7 +841,7 @@ func (client *NginxClient) GetStreamServers(upstream string) ([]StreamUpstreamSe var servers []StreamUpstreamServer err := client.get(path, &servers) if err != nil { - return nil, fmt.Errorf("failed to get stream servers of upstream server %v: %v", upstream, err) + return nil, fmt.Errorf("failed to get stream servers of upstream server %v: %w", upstream, err) } return servers, nil } @@ -822,7 +850,7 @@ func (client *NginxClient) GetStreamServers(upstream string) ([]StreamUpstreamSe func (client *NginxClient) AddStreamServer(upstream string, server StreamUpstreamServer) error { id, err := client.getIDOfStreamServer(upstream, server.Server) if err != nil { - return fmt.Errorf("failed to add %v stream server to %v upstream: %v", server.Server, upstream, err) + return fmt.Errorf("failed to add %v stream server to %v upstream: %w", server.Server, upstream, err) } if id != -1 { return fmt.Errorf("failed to add %v stream server to %v upstream: server already exists", server.Server, upstream) @@ -831,7 +859,7 @@ func (client *NginxClient) AddStreamServer(upstream string, server StreamUpstrea path := fmt.Sprintf("stream/upstreams/%v/servers/", upstream) err = client.post(path, &server) if err != nil { - return fmt.Errorf("failed to add %v stream server to %v upstream: %v", server.Server, upstream, err) + return fmt.Errorf("failed to add %v stream server to %v upstream: %w", server.Server, upstream, err) } return nil } @@ -840,7 +868,7 @@ func (client *NginxClient) AddStreamServer(upstream string, server StreamUpstrea func (client *NginxClient) DeleteStreamServer(upstream string, server string) error { id, err := client.getIDOfStreamServer(upstream, server) if err != nil { - return fmt.Errorf("failed to remove %v stream server from %v upstream: %v", server, upstream, err) + return fmt.Errorf("failed to remove %v stream server from %v upstream: %w", server, upstream, err) } if id == -1 { return fmt.Errorf("failed to remove %v stream server from %v upstream: server doesn't exist", server, upstream) @@ -849,7 +877,7 @@ func (client *NginxClient) DeleteStreamServer(upstream string, server string) er path := fmt.Sprintf("stream/upstreams/%v/servers/%v", upstream, id) err = client.delete(path, http.StatusOK) if err != nil { - return fmt.Errorf("failed to remove %v stream server from %v upstream: %v", server, upstream, err) + return fmt.Errorf("failed to remove %v stream server from %v upstream: %w", server, upstream, err) } return nil } @@ -861,7 +889,7 @@ func (client *NginxClient) DeleteStreamServer(upstream string, server string) er func (client *NginxClient) UpdateStreamServers(upstream string, servers []StreamUpstreamServer) (added []StreamUpstreamServer, deleted []StreamUpstreamServer, updated []StreamUpstreamServer, err error) { serversInNginx, err := client.GetStreamServers(upstream) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %w", upstream, err) } var formattedServers []StreamUpstreamServer @@ -875,21 +903,21 @@ func (client *NginxClient) UpdateStreamServers(upstream string, servers []Stream for _, server := range toAdd { err := client.AddStreamServer(upstream, server) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %w", upstream, err) } } for _, server := range toDelete { err := client.DeleteStreamServer(upstream, server.Server) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %w", upstream, err) } } for _, server := range toUpdate { err := client.UpdateStreamServer(upstream, server) if err != nil { - return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %v", upstream, err) + return nil, nil, nil, fmt.Errorf("failed to update stream servers of %v upstream: %w", upstream, err) } } @@ -899,7 +927,7 @@ func (client *NginxClient) UpdateStreamServers(upstream string, servers []Stream func (client *NginxClient) getIDOfStreamServer(upstream string, name string) (int, error) { servers, err := client.GetStreamServers(upstream) if err != nil { - return -1, fmt.Errorf("error getting id of stream server %v of upstream %v: %v", name, upstream, err) + return -1, fmt.Errorf("error getting id of stream server %v of upstream %v: %w", name, upstream, err) } for _, s := range servers { @@ -993,72 +1021,72 @@ func determineStreamUpdates(updatedServers []StreamUpstreamServer, nginxServers func (client *NginxClient) GetStats() (*Stats, error) { info, err := client.GetNginxInfo() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } caches, err := client.GetCaches() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } processes, err := client.GetProcesses() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } slabs, err := client.GetSlabs() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } cons, err := client.GetConnections() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } requests, err := client.GetHTTPRequests() if err != nil { - return nil, fmt.Errorf("Failed to get stats: %v", err) + return nil, fmt.Errorf("Failed to get stats: %w", err) } ssl, err := client.GetSSL() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } zones, err := client.GetServerZones() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } upstreams, err := client.GetUpstreams() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } streamZones, err := client.GetStreamServerZones() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } streamUpstreams, err := client.GetStreamUpstreams() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } streamZoneSync, err := client.GetStreamZoneSync() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } locationZones, err := client.GetLocationZones() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } resolvers, err := client.GetResolvers() if err != nil { - return nil, fmt.Errorf("failed to get stats: %v", err) + return nil, fmt.Errorf("failed to get stats: %w", err) } return &Stats{ @@ -1084,7 +1112,7 @@ func (client *NginxClient) GetNginxInfo() (*NginxInfo, error) { var info NginxInfo err := client.get("nginx", &info) if err != nil { - return nil, fmt.Errorf("failed to get info: %v", err) + return nil, fmt.Errorf("failed to get info: %w", err) } return &info, nil } @@ -1094,7 +1122,7 @@ func (client *NginxClient) GetCaches() (*Caches, error) { var caches Caches err := client.get("http/caches", &caches) if err != nil { - return nil, fmt.Errorf("failed to get caches: %v", err) + return nil, fmt.Errorf("failed to get caches: %w", err) } return &caches, nil } @@ -1104,7 +1132,7 @@ func (client *NginxClient) GetSlabs() (*Slabs, error) { var slabs Slabs err := client.get("slabs", &slabs) if err != nil { - return nil, fmt.Errorf("failed to get slabs: %v", err) + return nil, fmt.Errorf("failed to get slabs: %w", err) } return &slabs, nil } @@ -1114,7 +1142,7 @@ func (client *NginxClient) GetConnections() (*Connections, error) { var cons Connections err := client.get("connections", &cons) if err != nil { - return nil, fmt.Errorf("failed to get connections: %v", err) + return nil, fmt.Errorf("failed to get connections: %w", err) } return &cons, nil } @@ -1124,7 +1152,7 @@ func (client *NginxClient) GetHTTPRequests() (*HTTPRequests, error) { var requests HTTPRequests err := client.get("http/requests", &requests) if err != nil { - return nil, fmt.Errorf("failed to get http requests: %v", err) + return nil, fmt.Errorf("failed to get http requests: %w", err) } return &requests, nil } @@ -1134,7 +1162,7 @@ func (client *NginxClient) GetSSL() (*SSL, error) { var ssl SSL err := client.get("ssl", &ssl) if err != nil { - return nil, fmt.Errorf("failed to get ssl: %v", err) + return nil, fmt.Errorf("failed to get ssl: %w", err) } return &ssl, nil } @@ -1144,7 +1172,7 @@ func (client *NginxClient) GetServerZones() (*ServerZones, error) { var zones ServerZones err := client.get("http/server_zones", &zones) if err != nil { - return nil, fmt.Errorf("failed to get server zones: %v", err) + return nil, fmt.Errorf("failed to get server zones: %w", err) } return &zones, err } @@ -1154,12 +1182,13 @@ func (client *NginxClient) GetStreamServerZones() (*StreamServerZones, error) { var zones StreamServerZones err := client.get("stream/server_zones", &zones) if err != nil { - if err, ok := err.(*internalError); ok { - if err.Code == pathNotFoundCode { + var ie *internalError + if errors.As(err, &ie) { + if ie.Code == pathNotFoundCode { return &zones, nil } } - return nil, fmt.Errorf("failed to get stream server zones: %v", err) + return nil, fmt.Errorf("failed to get stream server zones: %w", err) } return &zones, err } @@ -1169,7 +1198,7 @@ func (client *NginxClient) GetUpstreams() (*Upstreams, error) { var upstreams Upstreams err := client.get("http/upstreams", &upstreams) if err != nil { - return nil, fmt.Errorf("failed to get upstreams: %v", err) + return nil, fmt.Errorf("failed to get upstreams: %w", err) } return &upstreams, nil } @@ -1179,12 +1208,13 @@ func (client *NginxClient) GetStreamUpstreams() (*StreamUpstreams, error) { var upstreams StreamUpstreams err := client.get("stream/upstreams", &upstreams) if err != nil { - if err, ok := err.(*internalError); ok { - if err.Code == pathNotFoundCode { + var ie *internalError + if errors.As(err, &ie) { + if ie.Code == pathNotFoundCode { return &upstreams, nil } } - return nil, fmt.Errorf("failed to get stream upstreams: %v", err) + return nil, fmt.Errorf("failed to get stream upstreams: %w", err) } return &upstreams, nil } @@ -1194,12 +1224,13 @@ func (client *NginxClient) GetStreamZoneSync() (*StreamZoneSync, error) { var streamZoneSync StreamZoneSync err := client.get("stream/zone_sync", &streamZoneSync) if err != nil { - if err, ok := err.(*internalError); ok { - if err.Code == pathNotFoundCode { + var ie *internalError + if errors.As(err, &ie) { + if ie.Code == pathNotFoundCode { return nil, nil } } - return nil, fmt.Errorf("failed to get stream zone sync: %v", err) + return nil, fmt.Errorf("failed to get stream zone sync: %w", err) } return &streamZoneSync, err @@ -1213,7 +1244,7 @@ func (client *NginxClient) GetLocationZones() (*LocationZones, error) { } err := client.get("http/location_zones", &locationZones) if err != nil { - return nil, fmt.Errorf("failed to get location zones: %v", err) + return nil, fmt.Errorf("failed to get location zones: %w", err) } return &locationZones, err @@ -1227,7 +1258,7 @@ func (client *NginxClient) GetResolvers() (*Resolvers, error) { } err := client.get("resolvers", &resolvers) if err != nil { - return nil, fmt.Errorf("failed to get resolvers: %v", err) + return nil, fmt.Errorf("failed to get resolvers: %w", err) } return &resolvers, err @@ -1238,7 +1269,7 @@ func (client *NginxClient) GetProcesses() (*Processes, error) { var processes Processes err := client.get("processes", &processes) if err != nil { - return nil, fmt.Errorf("failed to get processes: %v", err) + return nil, fmt.Errorf("failed to get processes: %w", err) } return &processes, err @@ -1273,7 +1304,7 @@ func (client *NginxClient) getKeyValPairs(zone string, stream bool) (KeyValPairs var keyValPairs KeyValPairs err := client.get(path, &keyValPairs) if err != nil { - return nil, fmt.Errorf("failed to get keyvals for %v/%v zone: %v", base, zone, err) + return nil, fmt.Errorf("failed to get keyvals for %v/%v zone: %w", base, zone, err) } return keyValPairs, nil } @@ -1298,7 +1329,7 @@ func (client *NginxClient) getAllKeyValPairs(stream bool) (KeyValPairsByZone, er var keyValPairsByZone KeyValPairsByZone err := client.get(path, &keyValPairsByZone) if err != nil { - return nil, fmt.Errorf("failed to get keyvals for all %v zones: %v", base, err) + return nil, fmt.Errorf("failed to get keyvals for all %v zones: %w", base, err) } return keyValPairsByZone, nil } @@ -1326,7 +1357,7 @@ func (client *NginxClient) addKeyValPair(zone string, key string, val string, st input := KeyValPairs{key: val} err := client.post(path, &input) if err != nil { - return fmt.Errorf("failed to add key value pair for %v/%v zone: %v", base, zone, err) + return fmt.Errorf("failed to add key value pair for %v/%v zone: %w", base, zone, err) } return nil } @@ -1354,7 +1385,7 @@ func (client *NginxClient) modifyKeyValPair(zone string, key string, val string, input := KeyValPairs{key: val} err := client.patch(path, &input, http.StatusNoContent) if err != nil { - return fmt.Errorf("failed to update key value pair for %v/%v zone: %v", base, zone, err) + return fmt.Errorf("failed to update key value pair for %v/%v zone: %w", base, zone, err) } return nil } @@ -1387,7 +1418,7 @@ func (client *NginxClient) deleteKeyValuePair(zone string, key string, stream bo path := fmt.Sprintf("%v/keyvals/%v", base, zone) err := client.patch(path, &keyval, http.StatusNoContent) if err != nil { - return fmt.Errorf("failed to remove key values pair for %v/%v zone: %v", base, zone, err) + return fmt.Errorf("failed to remove key values pair for %v/%v zone: %w", base, zone, err) } return nil } @@ -1414,7 +1445,7 @@ func (client *NginxClient) deleteKeyValPairs(zone string, stream bool) error { path := fmt.Sprintf("%v/keyvals/%v", base, zone) err := client.delete(path, http.StatusNoContent) if err != nil { - return fmt.Errorf("failed to remove all key value pairs for %v/%v zone: %v", base, zone, err) + return fmt.Errorf("failed to remove all key value pairs for %v/%v zone: %w", base, zone, err) } return nil } @@ -1425,7 +1456,7 @@ func (client *NginxClient) UpdateHTTPServer(upstream string, server UpstreamServ server.ID = 0 err := client.patch(path, &server, http.StatusOK) if err != nil { - return fmt.Errorf("failed to update %v server to %v upstream: %v", server.Server, upstream, err) + return fmt.Errorf("failed to update %v server to %v upstream: %w", server.Server, upstream, err) } return nil @@ -1437,7 +1468,7 @@ func (client *NginxClient) UpdateStreamServer(upstream string, server StreamUpst server.ID = 0 err := client.patch(path, &server, http.StatusOK) if err != nil { - return fmt.Errorf("failed to update %v stream server to %v upstream: %v", server.Server, upstream, err) + return fmt.Errorf("failed to update %v stream server to %v upstream: %w", server.Server, upstream, err) } return nil diff --git a/client/nginx_test.go b/client/nginx_test.go index 10938627..b8aa4eb8 100644 --- a/client/nginx_test.go +++ b/client/nginx_test.go @@ -7,107 +7,116 @@ import ( func TestDetermineUpdates(t *testing.T) { maxConns := 1 - var tests = []struct { + tests := []struct { updated []UpstreamServer nginx []UpstreamServer expectedToAdd []UpstreamServer expectedToDelete []UpstreamServer expectedToUpdate []UpstreamServer - }{{ - updated: []UpstreamServer{ - { - Server: "10.0.0.3:80", - }, - { - Server: "10.0.0.4:80", - }, - }, - nginx: []UpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", + }{ + { + updated: []UpstreamServer{ + { + Server: "10.0.0.3:80", + }, + { + Server: "10.0.0.4:80", + }, }, - { - ID: 2, - Server: "10.0.0.2:80", + nginx: []UpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, }, - }, - expectedToAdd: []UpstreamServer{ - { - Server: "10.0.0.3:80", + expectedToAdd: []UpstreamServer{ + { + Server: "10.0.0.3:80", + }, + { + Server: "10.0.0.4:80", + }, }, - { - Server: "10.0.0.4:80", + expectedToDelete: []UpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, }, }, - expectedToDelete: []UpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }, - { - ID: 2, - Server: "10.0.0.2:80", + { + updated: []UpstreamServer{ + { + Server: "10.0.0.2:80", + }, + { + Server: "10.0.0.3:80", + }, + { + Server: "10.0.0.4:80", + }, }, - }}, { - updated: []UpstreamServer{ - { - Server: "10.0.0.2:80", + nginx: []UpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, + { + ID: 3, + Server: "10.0.0.3:80", + }, }, - { - Server: "10.0.0.3:80", + expectedToAdd: []UpstreamServer{ + { + Server: "10.0.0.4:80", + }, }, - { - Server: "10.0.0.4:80", + expectedToDelete: []UpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, }, }, - nginx: []UpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }, - { - ID: 2, - Server: "10.0.0.2:80", + { + updated: []UpstreamServer{ + { + Server: "10.0.0.1:80", + }, + { + Server: "10.0.0.2:80", + }, + { + Server: "10.0.0.3:80", + }, }, - { - ID: 3, - Server: "10.0.0.3:80", + nginx: []UpstreamServer{ + { + Server: "10.0.0.1:80", + }, + { + Server: "10.0.0.2:80", + }, + { + Server: "10.0.0.3:80", + }, }, }, - expectedToAdd: []UpstreamServer{ - { - Server: "10.0.0.4:80", - }}, - expectedToDelete: []UpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }}, - }, { - updated: []UpstreamServer{ - { - Server: "10.0.0.1:80", - }, - { - Server: "10.0.0.2:80", - }, - { - Server: "10.0.0.3:80", - }}, - nginx: []UpstreamServer{ - { - Server: "10.0.0.1:80", - }, - { - Server: "10.0.0.2:80", - }, - { - Server: "10.0.0.3:80", - }, - }}, { - // empty values - }, + { + // empty values + }, { updated: []UpstreamServer{ { @@ -137,7 +146,8 @@ func TestDetermineUpdates(t *testing.T) { Server: "10.0.0.1:80", MaxConns: &maxConns, }, - }}, + }, + }, } for _, test := range tests { @@ -150,110 +160,119 @@ func TestDetermineUpdates(t *testing.T) { func TestStreamDetermineUpdates(t *testing.T) { maxConns := 1 - var tests = []struct { + tests := []struct { updated []StreamUpstreamServer nginx []StreamUpstreamServer expectedToAdd []StreamUpstreamServer expectedToDelete []StreamUpstreamServer expectedToUpdate []StreamUpstreamServer - }{{ - updated: []StreamUpstreamServer{ - { - Server: "10.0.0.3:80", - }, - { - Server: "10.0.0.4:80", - }, - }, - nginx: []StreamUpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", + }{ + { + updated: []StreamUpstreamServer{ + { + Server: "10.0.0.3:80", + }, + { + Server: "10.0.0.4:80", + }, }, - { - ID: 2, - Server: "10.0.0.2:80", + nginx: []StreamUpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, }, - }, - expectedToAdd: []StreamUpstreamServer{ - { - Server: "10.0.0.3:80", + expectedToAdd: []StreamUpstreamServer{ + { + Server: "10.0.0.3:80", + }, + { + Server: "10.0.0.4:80", + }, }, - { - Server: "10.0.0.4:80", + expectedToDelete: []StreamUpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, }, }, - expectedToDelete: []StreamUpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }, - { - ID: 2, - Server: "10.0.0.2:80", + { + updated: []StreamUpstreamServer{ + { + Server: "10.0.0.2:80", + }, + { + Server: "10.0.0.3:80", + }, + { + Server: "10.0.0.4:80", + }, }, - }}, { - updated: []StreamUpstreamServer{ - { - Server: "10.0.0.2:80", + nginx: []StreamUpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, + { + ID: 3, + Server: "10.0.0.3:80", + }, }, - { - Server: "10.0.0.3:80", + expectedToAdd: []StreamUpstreamServer{ + { + Server: "10.0.0.4:80", + }, }, - { - Server: "10.0.0.4:80", + expectedToDelete: []StreamUpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, }, }, - nginx: []StreamUpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }, - { - ID: 2, - Server: "10.0.0.2:80", + { + updated: []StreamUpstreamServer{ + { + Server: "10.0.0.1:80", + }, + { + Server: "10.0.0.2:80", + }, + { + Server: "10.0.0.3:80", + }, }, - { - ID: 3, - Server: "10.0.0.3:80", + nginx: []StreamUpstreamServer{ + { + ID: 1, + Server: "10.0.0.1:80", + }, + { + ID: 2, + Server: "10.0.0.2:80", + }, + { + ID: 3, + Server: "10.0.0.3:80", + }, }, }, - expectedToAdd: []StreamUpstreamServer{ - { - Server: "10.0.0.4:80", - }}, - expectedToDelete: []StreamUpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }}, - }, { - updated: []StreamUpstreamServer{ - { - Server: "10.0.0.1:80", - }, - { - Server: "10.0.0.2:80", - }, - { - Server: "10.0.0.3:80", - }}, - nginx: []StreamUpstreamServer{ - { - ID: 1, - Server: "10.0.0.1:80", - }, - { - ID: 2, - Server: "10.0.0.2:80", - }, - { - ID: 3, - Server: "10.0.0.3:80", - }, - }}, { - // empty values - }, + { + // empty values + }, { updated: []StreamUpstreamServer{ { @@ -283,7 +302,8 @@ func TestStreamDetermineUpdates(t *testing.T) { Server: "10.0.0.1:80", MaxConns: &maxConns, }, - }}, + }, + }, } for _, test := range tests { @@ -296,7 +316,7 @@ func TestStreamDetermineUpdates(t *testing.T) { func TestAddPortToServer(t *testing.T) { // More info about addresses http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server - var tests = []struct { + tests := []struct { address string expected string msg string diff --git a/tests/client_no_stream_test.go b/tests/client_no_stream_test.go index 6a7221a4..45348848 100644 --- a/tests/client_no_stream_test.go +++ b/tests/client_no_stream_test.go @@ -21,7 +21,7 @@ func TestStatsNoStream(t *testing.T) { stats, err := c.GetStats() if err != nil { - t.Errorf("Error getting stats: %v", err) + t.Errorf("Error getting stats: %w", err) } if stats.Connections.Accepted < 1 { diff --git a/tests/client_test.go b/tests/client_test.go index 59775a85..7fc0c642 100644 --- a/tests/client_test.go +++ b/tests/client_test.go @@ -33,7 +33,6 @@ var ( func TestStreamClient(t *testing.T) { httpClient := &http.Client{} c, err := client.NewNginxClient(httpClient, helpers.GetAPIEndpoint()) - if err != nil { t.Fatalf("Error when creating a client: %v", err) } @@ -70,7 +69,7 @@ func TestStreamClient(t *testing.T) { streamServers, err := c.GetStreamServers(streamUpstream) if err != nil { - t.Errorf("Error getting stream servers: %v", err) + t.Errorf("Error getting stream servers: %w", err) } if len(streamServers) != 0 { t.Errorf("Expected 0 servers, got %v", streamServers) @@ -90,7 +89,6 @@ func TestStreamClient(t *testing.T) { } streamAdded, streamDeleted, streamUpdated, err := c.UpdateStreamServers(streamUpstream, streamServers1) - if err != nil { t.Fatalf("Error when updating servers: %v", err) } @@ -117,7 +115,6 @@ func TestStreamClient(t *testing.T) { // updating with the same servers added, deleted, updated, err := c.UpdateStreamServers(streamUpstream, streamServers1) - if err != nil { t.Fatalf("Error when updating servers: %v", err) } @@ -201,7 +198,8 @@ func TestStreamClient(t *testing.T) { }, { Server: "127.0.0.2:8004", - }, { + }, + { Server: "127.0.0.2:8005", }, } @@ -277,7 +275,7 @@ func TestStreamUpstreamServer(t *testing.T) { } err = c.AddStreamServer(streamUpstream, streamServer) if err != nil { - t.Errorf("Error adding upstream server: %v", err) + t.Errorf("Error adding upstream server: %w", err) } servers, err := c.GetStreamServers(streamUpstream) if err != nil { @@ -296,14 +294,13 @@ func TestStreamUpstreamServer(t *testing.T) { // remove stream upstream servers _, _, _, err = c.UpdateStreamServers(streamUpstream, []client.StreamUpstreamServer{}) if err != nil { - t.Errorf("Couldn't remove servers: %v", err) + t.Errorf("Couldn't remove servers: %w", err) } } func TestClient(t *testing.T) { httpClient := &http.Client{} c, err := client.NewNginxClient(httpClient, helpers.GetAPIEndpoint()) - if err != nil { t.Fatalf("Error when creating a client: %v", err) } @@ -364,7 +361,6 @@ func TestClient(t *testing.T) { } added, deleted, updated, err := c.UpdateHTTPServers(upstream, servers1) - if err != nil { t.Fatalf("Error when updating servers: %v", err) } @@ -555,7 +551,7 @@ func TestUpstreamServer(t *testing.T) { } err = c.AddHTTPServer(upstream, server) if err != nil { - t.Errorf("Error adding upstream server: %v", err) + t.Errorf("Error adding upstream server: %w", err) } servers, err := c.GetHTTPServers(upstream) if err != nil { @@ -574,7 +570,7 @@ func TestUpstreamServer(t *testing.T) { // remove upstream servers _, _, _, err = c.UpdateHTTPServers(upstream, []client.UpstreamServer{}) if err != nil { - t.Errorf("Couldn't remove servers: %v", err) + t.Errorf("Couldn't remove servers: %w", err) } } @@ -590,12 +586,12 @@ func TestStats(t *testing.T) { } err = c.AddHTTPServer(upstream, server) if err != nil { - t.Errorf("Error adding upstream server: %v", err) + t.Errorf("Error adding upstream server: %w", err) } stats, err := c.GetStats() if err != nil { - t.Errorf("Error getting stats: %v", err) + t.Errorf("Error getting stats: %w", err) } // NginxInfo @@ -644,7 +640,7 @@ func TestStats(t *testing.T) { t.Errorf("Slab slots not visible in stats: %v", val.Slots) } } else { - t.Errorf("Slab stats for upsteam '%v' not found", upstream) + t.Errorf("Slab stats for upstream '%v' not found", upstream) } if stats.HTTPRequests.Total < 1 { @@ -693,7 +689,7 @@ func TestStats(t *testing.T) { // cleanup upstream servers _, _, _, err = c.UpdateHTTPServers(upstream, []client.UpstreamServer{}) if err != nil { - t.Errorf("Couldn't remove servers: %v", err) + t.Errorf("Couldn't remove servers: %w", err) } } @@ -724,7 +720,7 @@ func TestUpstreamServerDefaultParameters(t *testing.T) { } err = c.AddHTTPServer(upstream, server) if err != nil { - t.Errorf("Error adding upstream server: %v", err) + t.Errorf("Error adding upstream server: %w", err) } servers, err := c.GetHTTPServers(upstream) if err != nil { @@ -743,7 +739,7 @@ func TestUpstreamServerDefaultParameters(t *testing.T) { // remove upstream servers _, _, _, err = c.UpdateHTTPServers(upstream, []client.UpstreamServer{}) if err != nil { - t.Errorf("Couldn't remove servers: %v", err) + t.Errorf("Couldn't remove servers: %w", err) } } @@ -759,13 +755,13 @@ func TestStreamStats(t *testing.T) { } err = c.AddStreamServer(streamUpstream, server) if err != nil { - t.Errorf("Error adding stream upstream server: %v", err) + t.Errorf("Error adding stream upstream server: %w", err) } // make connection so we have stream server zone stats - ignore response _, err = net.Dial("tcp", helpers.GetStreamAddress()) if err != nil { - t.Errorf("Error making tcp connection: %v", err) + t.Errorf("Error making tcp connection: %w", err) } // wait for health checks @@ -773,7 +769,7 @@ func TestStreamStats(t *testing.T) { stats, err := c.GetStats() if err != nil { - t.Errorf("Error getting stats: %v", err) + t.Errorf("Error getting stats: %w", err) } if stats.Connections.Active == 0 { @@ -813,7 +809,7 @@ func TestStreamStats(t *testing.T) { // cleanup stream upstream servers _, _, _, err = c.UpdateStreamServers(streamUpstream, []client.StreamUpstreamServer{}) if err != nil { - t.Errorf("Couldn't remove stream servers: %v", err) + t.Errorf("Couldn't remove stream servers: %w", err) } } @@ -842,7 +838,7 @@ func TestStreamUpstreamServerDefaultParameters(t *testing.T) { } err = c.AddStreamServer(streamUpstream, streamServer) if err != nil { - t.Errorf("Error adding upstream server: %v", err) + t.Errorf("Error adding upstream server: %w", err) } streamServers, err := c.GetStreamServers(streamUpstream) if err != nil { @@ -861,7 +857,7 @@ func TestStreamUpstreamServerDefaultParameters(t *testing.T) { // cleanup stream upstream servers _, _, _, err = c.UpdateStreamServers(streamUpstream, []client.StreamUpstreamServer{}) if err != nil { - t.Errorf("Couldn't remove stream servers: %v", err) + t.Errorf("Couldn't remove stream servers: %w", err) } } @@ -875,7 +871,7 @@ func TestKeyValue(t *testing.T) { err = c.AddKeyValPair(zoneName, "key1", "val1") if err != nil { - t.Errorf("Couldn't set keyvals: %v", err) + t.Errorf("Couldn't set keyvals: %w", err) } var keyValPairs client.KeyValPairs @@ -892,7 +888,7 @@ func TestKeyValue(t *testing.T) { keyValuPairsByZone, err := c.GetAllKeyValPairs() if err != nil { - t.Errorf("Couldn't get keyvals, %v", err) + t.Errorf("Couldn't get keyvals, %w", err) } expectedKeyValPairsByZone := client.KeyValPairsByZone{ zoneName: expectedKeyValPairs, @@ -905,12 +901,12 @@ func TestKeyValue(t *testing.T) { expectedKeyValPairs["key1"] = "valModified1" err = c.ModifyKeyValPair(zoneName, "key1", "valModified1") if err != nil { - t.Errorf("couldn't set keyval: %v", err) + t.Errorf("couldn't set keyval: %w", err) } keyValPairs, err = c.GetKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't get keyval: %v", err) + t.Errorf("couldn't get keyval: %w", err) } if !reflect.DeepEqual(expectedKeyValPairs, keyValPairs) { t.Errorf("maps are not equal. expected: %+v, got: %+v", expectedKeyValPairs, keyValPairs) @@ -924,7 +920,7 @@ func TestKeyValue(t *testing.T) { err = c.AddKeyValPair(zoneName, "key2", "val2") if err != nil { - t.Errorf("error adding another key/val pair: %v", err) + t.Errorf("error adding another key/val pair: %w", err) } err = c.DeleteKeyValuePair(zoneName, "key1") @@ -937,7 +933,7 @@ func TestKeyValue(t *testing.T) { } keyValPairs, err = c.GetKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't get keyval: %v", err) + t.Errorf("couldn't get keyval: %w", err) } if !reflect.DeepEqual(keyValPairs, expectedKeyValPairs2) { t.Errorf("didn't delete key1 %+v", keyValPairs) @@ -945,12 +941,12 @@ func TestKeyValue(t *testing.T) { err = c.DeleteKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't delete all: %v", err) + t.Errorf("couldn't delete all: %w", err) } keyValPairs, err = c.GetKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't get keyval: %v", err) + t.Errorf("couldn't get keyval: %w", err) } if len(keyValPairs) > 0 { t.Errorf("zone should be empty after bulk delete") @@ -973,7 +969,7 @@ func TestKeyValueStream(t *testing.T) { err = c.AddStreamKeyValPair(zoneName, "key1", "val1") if err != nil { - t.Errorf("Couldn't set keyvals: %v", err) + t.Errorf("Couldn't set keyvals: %w", err) } keyValPairs, err := c.GetStreamKeyValPairs(zoneName) @@ -989,7 +985,7 @@ func TestKeyValueStream(t *testing.T) { keyValPairsByZone, err := c.GetAllStreamKeyValPairs() if err != nil { - t.Errorf("Couldn't get keyvals, %v", err) + t.Errorf("Couldn't get keyvals, %w", err) } expectedKeyValuePairsByZone := client.KeyValPairsByZone{ zoneName: expectedKeyValPairs, @@ -1003,12 +999,12 @@ func TestKeyValueStream(t *testing.T) { expectedKeyValPairs["key1"] = "valModified1" err = c.ModifyStreamKeyValPair(zoneName, "key1", "valModified1") if err != nil { - t.Errorf("couldn't set keyval: %v", err) + t.Errorf("couldn't set keyval: %w", err) } keyValPairs, err = c.GetStreamKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't get keyval: %v", err) + t.Errorf("couldn't get keyval: %w", err) } if !reflect.DeepEqual(expectedKeyValPairs, keyValPairs) { t.Errorf("maps are not equal. expected: %+v, got: %+v", expectedKeyValPairs, keyValPairs) @@ -1022,7 +1018,7 @@ func TestKeyValueStream(t *testing.T) { err = c.AddStreamKeyValPair(zoneName, "key2", "val2") if err != nil { - t.Errorf("error adding another key/val pair: %v", err) + t.Errorf("error adding another key/val pair: %w", err) } err = c.DeleteStreamKeyValuePair(zoneName, "key1") @@ -1032,7 +1028,7 @@ func TestKeyValueStream(t *testing.T) { keyValPairs, err = c.GetStreamKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't get keyval: %v", err) + t.Errorf("couldn't get keyval: %w", err) } expectedKeyValPairs2 := client.KeyValPairs{ "key2": "val2", @@ -1043,12 +1039,12 @@ func TestKeyValueStream(t *testing.T) { err = c.DeleteStreamKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't delete all: %v", err) + t.Errorf("couldn't delete all: %w", err) } keyValPairs, err = c.GetStreamKeyValPairs(zoneName) if err != nil { - t.Errorf("couldn't get keyval: %v", err) + t.Errorf("couldn't get keyval: %w", err) } if len(keyValPairs) > 0 { t.Errorf("zone should be empty after bulk delete") @@ -1074,7 +1070,7 @@ func TestStreamZoneSync(t *testing.T) { err = c1.AddStreamKeyValPair(streamZoneSync, "key1", "val1") if err != nil { - t.Errorf("Couldn't set keyvals: %v", err) + t.Errorf("Couldn't set keyvals: %w", err) } // wait for nodes to sync information of synced zones @@ -1082,7 +1078,7 @@ func TestStreamZoneSync(t *testing.T) { statsC1, err := c1.GetStats() if err != nil { - t.Errorf("Error getting stats: %v", err) + t.Errorf("Error getting stats: %w", err) } if statsC1.StreamZoneSync == nil { @@ -1122,7 +1118,7 @@ func TestStreamZoneSync(t *testing.T) { statsC2, err := c2.GetStats() if err != nil { - t.Errorf("Error getting stats: %v", err) + t.Errorf("Error getting stats: %w", err) } if statsC2.StreamZoneSync == nil {