Files
backrest/pkg/restic/restic_json_test.go
Francisco Javier e41c357d30
Release Please / release-please (push) Has been cancelled
Release Preview / call-reusable-release (push) Has been cancelled
Test / test-nix (push) Has been cancelled
Test / test-win (push) Has been cancelled
Update Restic / update-restic-version (push) Has been cancelled
fix: improve JSON parsing resilience (#928)
2025-10-04 19:29:11 -07:00

51 lines
1.3 KiB
Go

package restic
import "testing"
type jsonTestStruct struct {
Value int `json:"value"`
}
func TestParseJSONSkippingWarnings_NoWarnings(t *testing.T) {
var result jsonTestStruct
parsed, skipped, err := parseJSONSkippingWarnings([]byte("{\"value\":1}"), &result)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if skipped {
t.Fatalf("expected no skipped warnings")
}
if string(parsed) != "{\"value\":1}" {
t.Fatalf("unexpected parsed output: %q", string(parsed))
}
if result.Value != 1 {
t.Fatalf("unexpected parsed value: %d", result.Value)
}
}
func TestParseJSONSkippingWarnings_WithWarnings(t *testing.T) {
var result jsonTestStruct
input := []byte("warning: foo\n{\"value\":2}\n")
parsed, skipped, err := parseJSONSkippingWarnings(input, &result)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !skipped {
t.Fatalf("expected skipped warnings")
}
if string(parsed) != "{\"value\":2}" {
t.Fatalf("unexpected parsed output: %q", string(parsed))
}
if result.Value != 2 {
t.Fatalf("unexpected parsed value: %d", result.Value)
}
}
func TestParseJSONSkippingWarnings_NoNewline(t *testing.T) {
var result jsonTestStruct
input := []byte("warning without newline {\"value\":3}")
if _, _, err := parseJSONSkippingWarnings(input, &result); err == nil {
t.Fatalf("expected error when JSON cannot be located")
}
}