Skip to content

Commit 977701a

Browse files
committed
test(metadata): add tests for handling truncated and invalid JSON files
1 parent f33f297 commit 977701a

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

pkg/distribution/internal/safetensors/model_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,73 @@ func TestNewModel_WithMetadata(t *testing.T) {
117117
}
118118
}
119119

120+
func TestParseHeader_TruncatedFile(t *testing.T) {
121+
// Create a test file with incomplete header
122+
tmpDir := t.TempDir()
123+
filePath := filepath.Join(tmpDir, "truncated.safetensors")
124+
125+
file, err := os.Create(filePath)
126+
if err != nil {
127+
t.Fatalf("failed to create test file: %v", err)
128+
}
129+
130+
// Write header length claiming 1000 bytes
131+
headerLen := uint64(1000)
132+
if err := binary.Write(file, binary.LittleEndian, headerLen); err != nil {
133+
file.Close()
134+
t.Fatalf("failed to write header length: %v", err)
135+
}
136+
137+
// But only write 500 bytes (truncated)
138+
truncatedJSON := make([]byte, 500)
139+
copy(truncatedJSON, []byte(`{"incomplete": "json`))
140+
if _, err := file.Write(truncatedJSON); err != nil {
141+
file.Close()
142+
t.Fatalf("failed to write truncated data: %v", err)
143+
}
144+
file.Close()
145+
146+
// Attempt to parse - should fail gracefully
147+
_, err = ParseSafetensorsHeader(filePath)
148+
if err == nil {
149+
t.Fatal("ParseSafetensorsHeader() expected error for truncated file, got nil")
150+
}
151+
}
152+
153+
func TestParseHeader_InvalidJSON(t *testing.T) {
154+
// Create a test file with invalid JSON
155+
tmpDir := t.TempDir()
156+
filePath := filepath.Join(tmpDir, "invalid.safetensors")
157+
158+
// Create malformed JSON
159+
invalidJSON := []byte(`{"missing": "closing brace", "broken": [1, 2, }`)
160+
161+
file, err := os.Create(filePath)
162+
if err != nil {
163+
t.Fatalf("failed to create test file: %v", err)
164+
}
165+
166+
// Write header length
167+
headerLen := uint64(len(invalidJSON))
168+
if err := binary.Write(file, binary.LittleEndian, headerLen); err != nil {
169+
file.Close()
170+
t.Fatalf("failed to write header length: %v", err)
171+
}
172+
173+
// Write invalid JSON
174+
if _, err := file.Write(invalidJSON); err != nil {
175+
file.Close()
176+
t.Fatalf("failed to write invalid JSON: %v", err)
177+
}
178+
file.Close()
179+
180+
// Attempt to parse - should fail gracefully
181+
_, err = ParseSafetensorsHeader(filePath)
182+
if err == nil {
183+
t.Fatal("ParseSafetensorsHeader() expected error for invalid JSON, got nil")
184+
}
185+
}
186+
120187
func TestNewModel_NoMetadata(t *testing.T) {
121188
// Create a test safetensors file without metadata section
122189
tmpDir := t.TempDir()

0 commit comments

Comments
 (0)