chore(all): review error wrappings

- remove repetitive `cannot` and `failed` prefixes
- rename `unmarshaling` to `decoding`
This commit is contained in:
Quentin McGaw
2023-04-01 16:53:04 +00:00
parent 63a696d7e7
commit 4ba159e483
76 changed files with 178 additions and 178 deletions

View File

@@ -54,7 +54,7 @@ func fetchAPI(ctx context.Context, client *http.Client) (
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
_ = response.Body.Close()
return data, fmt.Errorf("unmarshaling response body: %w", err)
return data, fmt.Errorf("decoding response body: %w", err)
}
if err := response.Body.Close(); err != nil {

View File

@@ -32,7 +32,7 @@ func getOpenVPNConnection(extractor Extractor,
connection models.Connection, err error) {
_, connection, err = extractor.Data(*selection.OpenVPN.ConfFile)
if err != nil {
return connection, fmt.Errorf("cannot extract connection: %w", err)
return connection, fmt.Errorf("extracting connection: %w", err)
}
customPort := *selection.OpenVPN.CustomPort

View File

@@ -50,11 +50,11 @@ func fetchAPI(ctx context.Context, client *http.Client) (
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
_ = response.Body.Close()
return data, fmt.Errorf("failed unmarshaling response body: %w", err)
return data, fmt.Errorf("decoding response body: %w", err)
}
if err := response.Body.Close(); err != nil {
return data, fmt.Errorf("cannot close response body: %w", err)
return data, fmt.Errorf("closing response body: %w", err)
}
return data, nil

View File

@@ -37,7 +37,7 @@ func Test_Provider_GetConnection(t *testing.T) {
"error": {
storageErr: errTest,
errWrapped: errTest,
errMessage: "cannot filter servers: test error",
errMessage: "filtering servers: test error",
},
"default OpenVPN TCP port": {
filteredServers: []models.Server{

View File

@@ -37,7 +37,7 @@ func Test_Provider_GetConnection(t *testing.T) {
"error": {
storageErr: errTest,
errWrapped: errTest,
errMessage: "cannot filter servers: test error",
errMessage: "filtering servers: test error",
},
"default OpenVPN TCP port": {
filteredServers: []models.Server{

View File

@@ -53,11 +53,11 @@ func fetchAPI(ctx context.Context, client *http.Client) (
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
_ = response.Body.Close()
return data, fmt.Errorf("failed unmarshaling response body: %w", err)
return data, fmt.Errorf("decoding response body: %w", err)
}
if err := response.Body.Close(); err != nil {
return data, fmt.Errorf("cannot close response body: %w", err)
return data, fmt.Errorf("closing response body: %w", err)
}
return data, nil

View File

@@ -27,7 +27,7 @@ func Test_fetchAPI(t *testing.T) {
},
"nil body": {
responseStatus: http.StatusOK,
err: errors.New("failed unmarshaling response body: EOF"),
err: errors.New("decoding response body: EOF"),
},
"no server": {
responseStatus: http.StatusOK,

View File

@@ -14,7 +14,7 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
data, err := fetchAPI(ctx, u.client)
if err != nil {
return nil, fmt.Errorf("failed fetching API: %w", err)
return nil, fmt.Errorf("fetching API: %w", err)
}
hosts := make(map[string]struct{}, len(data.Servers))

View File

@@ -47,7 +47,7 @@ func Test_Updater_GetServers(t *testing.T) {
"http response error": {
warnerBuilder: func(ctrl *gomock.Controller) common.Warner { return nil },
responseStatus: http.StatusNoContent,
err: errors.New("failed fetching API: HTTP status code not OK: 204 No Content"),
err: errors.New("fetching API: HTTP status code not OK: 204 No Content"),
},
"resolve error": {
warnerBuilder: func(ctrl *gomock.Controller) common.Warner {

View File

@@ -37,7 +37,7 @@ func Test_Provider_GetConnection(t *testing.T) {
"error": {
storageErr: errTest,
errWrapped: errTest,
errMessage: "cannot filter servers: test error",
errMessage: "filtering servers: test error",
},
"default OpenVPN TCP port": {
filteredServers: []models.Server{

View File

@@ -9,8 +9,8 @@ import (
)
var (
ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
ErrUnmarshalResponseBody = errors.New("failed unmarshaling response body")
ErrHTTPStatusCodeNotOK = errors.New("HTTP status code not OK")
ErrDecodeResponseBody = errors.New("failed decoding response body")
)
type serverData struct {
@@ -47,7 +47,7 @@ func fetchAPI(ctx context.Context, client *http.Client) (data []serverData, err
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
return nil, fmt.Errorf("%w: %s", ErrUnmarshalResponseBody, err)
return nil, fmt.Errorf("%w: %s", ErrDecodeResponseBody, err)
}
if err := response.Body.Close(); err != nil {

View File

@@ -43,7 +43,7 @@ func fetchAPI(ctx context.Context, client *http.Client) (data []serverData, err
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
return nil, fmt.Errorf("failed unmarshaling response body: %w", err)
return nil, fmt.Errorf("decoding response body: %w", err)
}
if err := response.Body.Close(); err != nil {

View File

@@ -15,7 +15,7 @@ import (
func newHTTPClient(serverName string) (client *http.Client, err error) {
rootCAs, err := x509.SystemCertPool()
if err != nil {
return nil, fmt.Errorf("cannot load system certificates: %w", err)
return nil, fmt.Errorf("loading system certificates: %w", err)
}
const piaCertificate = "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" //nolint:lll

View File

@@ -48,12 +48,12 @@ func (p *Provider) PortForward(ctx context.Context, client *http.Client,
privateIPClient, err := newHTTPClient(serverName)
if err != nil {
return 0, fmt.Errorf("cannot create custom HTTP client: %w", err)
return 0, fmt.Errorf("creating custom HTTP client: %w", err)
}
data, err := readPIAPortForwardData(p.portForwardPath)
if err != nil {
return 0, fmt.Errorf("cannot read saved port forwarded data: %w", err)
return 0, fmt.Errorf("reading saved port forwarded data: %w", err)
}
dataFound := data.Port > 0
@@ -72,7 +72,7 @@ func (p *Provider) PortForward(ctx context.Context, client *http.Client,
data, err = refreshPIAPortForwardData(ctx, client, privateIPClient, gateway,
p.portForwardPath, p.authFilePath)
if err != nil {
return 0, fmt.Errorf("cannot refresh port forward data: %w", err)
return 0, fmt.Errorf("refreshing port forward data: %w", err)
}
durationToExpiration = data.Expiration.Sub(p.timeNow())
}
@@ -80,7 +80,7 @@ func (p *Provider) PortForward(ctx context.Context, client *http.Client,
// First time binding
if err := bindPort(ctx, privateIPClient, gateway, data); err != nil {
return 0, fmt.Errorf("cannot bind port: %w", err)
return 0, fmt.Errorf("binding port: %w", err)
}
return data.Port, nil
@@ -94,12 +94,12 @@ func (p *Provider) KeepPortForward(ctx context.Context, client *http.Client,
port uint16, gateway net.IP, serverName string) (err error) {
privateIPClient, err := newHTTPClient(serverName)
if err != nil {
return fmt.Errorf("cannot create custom HTTP client: %w", err)
return fmt.Errorf("creating custom HTTP client: %w", err)
}
data, err := readPIAPortForwardData(p.portForwardPath)
if err != nil {
return fmt.Errorf("cannot read saved port forwarded data: %w", err)
return fmt.Errorf("reading saved port forwarded data: %w", err)
}
durationToExpiration := data.Expiration.Sub(p.timeNow())
@@ -121,7 +121,7 @@ func (p *Provider) KeepPortForward(ctx context.Context, client *http.Client,
case <-keepAliveTimer.C:
err := bindPort(ctx, privateIPClient, gateway, data)
if err != nil {
return fmt.Errorf("cannot bind port: %w", err)
return fmt.Errorf("binding port: %w", err)
}
keepAliveTimer.Reset(keepAlivePeriod)
case <-expiryTimer.C:
@@ -135,16 +135,16 @@ func refreshPIAPortForwardData(ctx context.Context, client, privateIPClient *htt
gateway net.IP, portForwardPath, authFilePath string) (data piaPortForwardData, err error) {
data.Token, err = fetchToken(ctx, client, authFilePath)
if err != nil {
return data, fmt.Errorf("cannot fetch token: %w", err)
return data, fmt.Errorf("fetching token: %w", err)
}
data.Port, data.Signature, data.Expiration, err = fetchPortForwardData(ctx, privateIPClient, gateway, data.Token)
if err != nil {
return data, fmt.Errorf("cannot fetch port forwarding data: %w", err)
return data, fmt.Errorf("fetching port forwarding data: %w", err)
}
if err := writePIAPortForwardData(portForwardPath, data); err != nil {
return data, fmt.Errorf("cannot persist port forwarding data: %w", err)
return data, fmt.Errorf("persisting port forwarding data: %w", err)
}
return data, nil
@@ -236,7 +236,7 @@ func fetchToken(ctx context.Context, client *http.Client,
authFilePath string) (token string, err error) {
username, password, err := getOpenvpnCredentials(authFilePath)
if err != nil {
return "", fmt.Errorf("cannot get username and password: %w", err)
return "", fmt.Errorf("getting username and password: %w", err)
}
errSubstitutions := map[string]string{
@@ -274,7 +274,7 @@ func fetchToken(ctx context.Context, client *http.Client,
Token string `json:"token"`
}
if err := decoder.Decode(&result); err != nil {
return "", fmt.Errorf("cannot unmarshal response: %w", err)
return "", fmt.Errorf("decoding response: %w", err)
}
if result.Token == "" {
@@ -291,13 +291,13 @@ func getOpenvpnCredentials(authFilePath string) (
username, password string, err error) {
file, err := os.Open(authFilePath)
if err != nil {
return "", "", fmt.Errorf("cannot read OpenVPN authentication file: %w", err)
return "", "", fmt.Errorf("reading OpenVPN authentication file: %w", err)
}
authData, err := io.ReadAll(file)
if err != nil {
_ = file.Close()
return "", "", fmt.Errorf("authentication file is malformed: %w", err)
return "", "", fmt.Errorf("reading authentication file: %w", err)
}
if err := file.Close(); err != nil {
@@ -329,13 +329,13 @@ func fetchPortForwardData(ctx context.Context, client *http.Client, gateway net.
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url.String(), nil)
if err != nil {
err = replaceInErr(err, errSubstitutions)
return 0, "", expiration, fmt.Errorf("cannot obtain signature payload: %w", err)
return 0, "", expiration, fmt.Errorf("obtaining signature payload: %w", err)
}
response, err := client.Do(request)
if err != nil {
err = replaceInErr(err, errSubstitutions)
return 0, "", expiration, fmt.Errorf("cannot obtain signature payload: %w", err)
return 0, "", expiration, fmt.Errorf("obtaining signature payload: %w", err)
}
defer response.Body.Close()
@@ -350,7 +350,7 @@ func fetchPortForwardData(ctx context.Context, client *http.Client, gateway net.
Signature string `json:"signature"`
}
if err := decoder.Decode(&data); err != nil {
return 0, "", expiration, fmt.Errorf("cannot unmarshal response: %w", err)
return 0, "", expiration, fmt.Errorf("decoding response: %w", err)
}
if data.Status != "OK" {
@@ -359,7 +359,7 @@ func fetchPortForwardData(ctx context.Context, client *http.Client, gateway net.
port, _, expiration, err = unpackPayload(data.Payload)
if err != nil {
return 0, "", expiration, fmt.Errorf("cannot unpack payload data: %w", err)
return 0, "", expiration, fmt.Errorf("unpacking payload data: %w", err)
}
return port, data.Signature, expiration, err
}
@@ -371,7 +371,7 @@ var (
func bindPort(ctx context.Context, client *http.Client, gateway net.IP, data piaPortForwardData) (err error) {
payload, err := packPayload(data.Port, data.Token, data.Expiration)
if err != nil {
return fmt.Errorf("cannot serialize payload: %w", err)
return fmt.Errorf("serializing payload: %w", err)
}
queryParams := make(url.Values)
@@ -410,7 +410,7 @@ func bindPort(ctx context.Context, client *http.Client, gateway net.IP, data pia
Message string `json:"message"`
}
if err := decoder.Decode(&responseData); err != nil {
return fmt.Errorf("cannot unmarshal response: from %s: %w", bindPortURL.String(), err)
return fmt.Errorf("decoding response: from %s: %w", bindPortURL.String(), err)
}
if responseData.Status != "OK" {

View File

@@ -54,7 +54,7 @@ func fetchAPI(ctx context.Context, client *http.Client) (
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
return data, fmt.Errorf("failed unmarshaling response body: %w", err)
return data, fmt.Errorf("decoding response body: %w", err)
}
if err := response.Body.Close(); err != nil {

View File

@@ -72,7 +72,7 @@ func fetchAPI(ctx context.Context, client *http.Client) (
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&servers); err != nil {
return nil, fmt.Errorf("failed unmarshaling response body: %w", err)
return nil, fmt.Errorf("decoding response body: %w", err)
}
if err := response.Body.Close(); err != nil {

View File

@@ -115,7 +115,7 @@ func Test_fetchAPI(t *testing.T) {
},
"nil body": {
responseStatus: http.StatusOK,
err: errors.New("failed unmarshaling response body: EOF"),
err: errors.New("decoding response body: EOF"),
},
"no server": {
responseStatus: http.StatusOK,

View File

@@ -15,7 +15,7 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
err = addServersFromAPI(ctx, u.client, hts)
if err != nil {
return nil, fmt.Errorf("cannot fetch server information from API: %w", err)
return nil, fmt.Errorf("fetching server information from API: %w", err)
}
warnings, err := addOpenVPNServersFromZip(ctx, u.unzipper, hts)
@@ -23,7 +23,7 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
u.warner.Warn(warning)
}
if err != nil {
return nil, fmt.Errorf("cannot get OpenVPN ZIP file: %w", err)
return nil, fmt.Errorf("getting OpenVPN ZIP file: %w", err)
}
getRemainingServers(hts)

View File

@@ -38,7 +38,7 @@ func GetConnection(provider string,
connection models.Connection, err error) {
servers, err := storage.FilterServers(provider, selection)
if err != nil {
return connection, fmt.Errorf("cannot filter servers: %w", err)
return connection, fmt.Errorf("filtering servers: %w", err)
}
protocol := getProtocol(selection)

View File

@@ -36,7 +36,7 @@ func Test_GetConnection(t *testing.T) {
"storage filter error": {
filterError: errTest,
errWrapped: errTest,
errMessage: "cannot filter servers: test error",
errMessage: "filtering servers: test error",
},
"server without IPs": {
filteredServers: []models.Server{

View File

@@ -14,7 +14,7 @@ func (u *Updater) FetchServers(ctx context.Context, minServers int) (
servers []models.Server, err error) {
servers, err = fetchServers(ctx, u.client, u.warner)
if err != nil {
return nil, fmt.Errorf("cannot fetch servers: %w", err)
return nil, fmt.Errorf("fetching servers: %w", err)
} else if len(servers) < minServers {
return nil, fmt.Errorf("%w: %d and expected at least %d",
common.ErrNotEnoughServers, len(servers), minServers)

View File

@@ -37,7 +37,7 @@ func Test_Provider_GetConnection(t *testing.T) {
"error": {
storageErr: errTest,
errWrapped: errTest,
errMessage: "cannot filter servers: test error",
errMessage: "filtering servers: test error",
},
"default OpenVPN TCP port": {
filteredServers: []models.Server{

View File

@@ -38,7 +38,7 @@ func Test_Provider_GetConnection(t *testing.T) {
"error": {
storageErr: errTest,
errWrapped: errTest,
errMessage: "cannot filter servers: test error",
errMessage: "filtering servers: test error",
},
"default OpenVPN TCP port": {
filteredServers: []models.Server{

View File

@@ -62,7 +62,7 @@ func fetchAPI(ctx context.Context, client *http.Client) (
decoder := json.NewDecoder(response.Body)
if err := decoder.Decode(&data); err != nil {
return data, fmt.Errorf("failed unmarshaling response body: %w", err)
return data, fmt.Errorf("decoding response body: %w", err)
}
return data, nil