From 4bd548915fb96e39dd1d81cffbcb668012fcfd47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lipinsk=C3=BD?= <6032558+Mr-Tao@users.noreply.github.com> Date: Thu, 27 Aug 2026 01:01:49 +0200 Subject: [PATCH] refactor(stereo): satisfy cleanup lint --- pkg/stereopair/marge_cleanup.go | 41 ++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/pkg/stereopair/marge_cleanup.go b/pkg/stereopair/marge_cleanup.go index 3e31f993..3e721baa 100644 --- a/pkg/stereopair/marge_cleanup.go +++ b/pkg/stereopair/marge_cleanup.go @@ -68,17 +68,11 @@ func DeleteMargeGroupGeneration(httpClient *http.Client, ref GenerationRef) erro return verifyMargeGroupGenerationDeleted(httpClient, ref) } - body, readErr := io.ReadAll(io.LimitReader(response.Body, 1025)) - closeErr := response.Body.Close() - if readErr != nil { - return fmt.Errorf("read Marge generation cleanup response: %w", readErr) - } - if closeErr != nil { - return fmt.Errorf("close Marge generation cleanup response: %w", closeErr) - } - if len(body) > 1024 { - return fmt.Errorf("delete Marge group generation: HTTP %d response exceeds 1024 bytes", response.StatusCode) + body, err := readMargeGenerationCleanupResponse(response) + if err != nil { + return err } + if response.StatusCode == http.StatusInternalServerError && margeWrappedGroupNotFound(body, ref) { return verifyMargeGroupGenerationDeleted(httpClient, ref) } @@ -87,6 +81,25 @@ func DeleteMargeGroupGeneration(httpClient *http.Client, ref GenerationRef) erro response.StatusCode, strings.TrimSpace(string(body))) } +func readMargeGenerationCleanupResponse(response *http.Response) ([]byte, error) { + body, readErr := io.ReadAll(io.LimitReader(response.Body, 1025)) + closeErr := response.Body.Close() + + if readErr != nil { + return nil, fmt.Errorf("read Marge generation cleanup response: %w", readErr) + } + + if closeErr != nil { + return nil, fmt.Errorf("close Marge generation cleanup response: %w", closeErr) + } + + if len(body) > 1024 { + return nil, fmt.Errorf("delete Marge group generation: HTTP %d response exceeds 1024 bytes", response.StatusCode) + } + + return body, nil +} + func verifyMargeGroupGenerationDeleted(httpClient *http.Client, ref GenerationRef) error { group, err := getMargeDeviceGroup(httpClient, ref) if err != nil { @@ -105,24 +118,30 @@ func margeWrappedGroupNotFound(body []byte, ref GenerationRef) bool { XMLName xml.Name Message string `xml:",chardata"` } + decoder := xml.NewDecoder(bytes.NewReader(body)) if err := decoder.Decode(&response); err != nil || response.XMLName.Local != "error" { return false } + for { token, err := decoder.Token() - if err == io.EOF { + + if errors.Is(err, io.EOF) { break } + if err != nil { return false } + if data, ok := token.(xml.CharData); !ok || strings.TrimSpace(string(data)) != "" { return false } } want := fmt.Sprintf("Unexpected error: 404: Group %s does not exist in account %s", ref.GroupID, ref.AccountID) + return strings.TrimSpace(response.Message) == want }