Skip to content

Commit d745f6a

Browse files
authored
Merge pull request #4754 from kersten/refactor/wrap-external-plugin-errors
✨ (API) add contextual error wrapping for external plugin helpers
2 parents ba65372 + 304dcb1 commit d745f6a

File tree

2 files changed

+31
-21
lines changed

2 files changed

+31
-21
lines changed

pkg/plugins/external/external_test.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,12 @@ func (m *mockValidFlagOutputGetter) GetExecOutput(_ []byte, _ string) ([]byte, e
8484
Universe: nil,
8585
Flags: getFlags(),
8686
}
87-
return json.Marshal(response)
87+
marshaledResponse, err := json.Marshal(response)
88+
if err != nil {
89+
return nil, fmt.Errorf("error marshalling response: %w", err)
90+
}
91+
92+
return marshaledResponse, nil
8893
}
8994

9095
type mockValidMEOutputGetter struct{}
@@ -97,7 +102,12 @@ func (m *mockValidMEOutputGetter) GetExecOutput(_ []byte, _ string) ([]byte, err
97102
Metadata: getMetadata(),
98103
}
99104

100-
return json.Marshal(response)
105+
marshaledResponse, err := json.Marshal(response)
106+
if err != nil {
107+
return nil, fmt.Errorf("error marshalling response: %w", err)
108+
}
109+
110+
return marshaledResponse, nil
101111
}
102112

103113
const (

pkg/plugins/external/helpers.go

+19-19
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func (e *execOutputGetter) GetExecOutput(request []byte, path string) ([]byte, e
5757
cmd.Stderr = os.Stderr
5858
out, err := cmd.Output()
5959
if err != nil {
60-
return nil, err
60+
return nil, fmt.Errorf("error getting output for cmd %q: %w", cmd, err)
6161
}
6262

6363
return out, nil
@@ -84,17 +84,17 @@ func (o *osWdGetter) GetCurrentDir() (string, error) {
8484
func makePluginRequest(req external.PluginRequest, path string) (*external.PluginResponse, error) {
8585
reqBytes, err := json.Marshal(req)
8686
if err != nil {
87-
return nil, err
87+
return nil, fmt.Errorf("error marshalling plugin request: %w", err)
8888
}
8989

9090
out, err := outputGetter.GetExecOutput(reqBytes, path)
9191
if err != nil {
92-
return nil, err
92+
return nil, fmt.Errorf("error executing plugin request: %w", err)
9393
}
9494

9595
res := external.PluginResponse{}
96-
if err := json.Unmarshal(out, &res); err != nil {
97-
return nil, err
96+
if err = json.Unmarshal(out, &res); err != nil {
97+
return nil, fmt.Errorf("error unmarshalling plugin response: %w", err)
9898
}
9999

100100
// Error if the plugin failed.
@@ -114,7 +114,7 @@ func getUniverseMap(fs machinery.Filesystem) (map[string]string, error) {
114114

115115
err := afero.Walk(fs.FS, ".", func(path string, info iofs.FileInfo, err error) error {
116116
if err != nil {
117-
return err
117+
return fmt.Errorf("error walking path %q: %w", path, err)
118118
}
119119

120120
if info.IsDir() {
@@ -123,7 +123,7 @@ func getUniverseMap(fs machinery.Filesystem) (map[string]string, error) {
123123

124124
file, err := fs.FS.Open(path)
125125
if err != nil {
126-
return err
126+
return fmt.Errorf("error opening file %q: %w", path, err)
127127
}
128128

129129
defer func() {
@@ -134,15 +134,15 @@ func getUniverseMap(fs machinery.Filesystem) (map[string]string, error) {
134134

135135
content, err := io.ReadAll(file)
136136
if err != nil {
137-
return err
137+
return fmt.Errorf("error reading file %q: %w", path, err)
138138
}
139139

140140
universe[path] = string(content)
141141

142142
return nil
143143
})
144144
if err != nil {
145-
return nil, err
145+
return nil, fmt.Errorf("error walking the directory: %w", err)
146146
}
147147

148148
return universe, nil
@@ -153,7 +153,7 @@ func handlePluginResponse(fs machinery.Filesystem, req external.PluginRequest, p
153153

154154
req.Universe, err = getUniverseMap(fs)
155155
if err != nil {
156-
return err
156+
return fmt.Errorf("error getting universe map: %w", err)
157157
}
158158

159159
res, err := makePluginRequest(req, path)
@@ -167,27 +167,27 @@ func handlePluginResponse(fs machinery.Filesystem, req external.PluginRequest, p
167167
}
168168

169169
for filename, data := range res.Universe {
170-
path := filepath.Join(currentDir, filename)
171-
dir := filepath.Dir(path)
170+
file := filepath.Join(currentDir, filename)
171+
dir := filepath.Dir(file)
172172

173173
// create the directory if it does not exist
174-
if err := os.MkdirAll(dir, 0o750); err != nil {
174+
if err = os.MkdirAll(dir, 0o750); err != nil {
175175
return fmt.Errorf("error creating the directory: %w", err)
176176
}
177177

178-
f, err := fs.FS.Create(path)
179-
if err != nil {
180-
return err
178+
f, createErr := fs.FS.Create(file)
179+
if createErr != nil {
180+
return fmt.Errorf("error creating file %q: %w", file, createErr)
181181
}
182182

183183
defer func() {
184-
if err := f.Close(); err != nil {
184+
if err = f.Close(); err != nil {
185185
return
186186
}
187187
}()
188188

189-
if _, err := f.Write([]byte(data)); err != nil {
190-
return err
189+
if _, err = f.Write([]byte(data)); err != nil {
190+
return fmt.Errorf("error writing file %q: %w", file, err)
191191
}
192192
}
193193

0 commit comments

Comments
 (0)