Diff
1diff --git a/parser/parser.go b/parser/parser.go
2index a123b88abd38c7540a957c4e37b5e1fbe90ece2a..3221898d7bb0c260dacff1485f477067d28e55b6 100644
3--- a/parser/parser.go
4+++ b/parser/parser.go
5@@ -1,11 +1,13 @@
6 package parser
7
8 import (
9+ "errors"
10 "fmt"
11 "io"
12
13- "github.com/TheEdgeOfRage/logfmt/config"
14 "github.com/go-logfmt/logfmt"
15+
16+ "github.com/TheEdgeOfRage/logfmt/config"
17 )
18
19 type Parser struct {
20@@ -43,5 +45,8 @@ func (p *Parser) Start() error {
21 }
22 }
23
24- return nil
25+ if errors.Is(decoder.Err(), io.EOF) {
26+ return nil
27+ }
28+ return decoder.Err()
29 }
30diff --git a/parser/parser_test.go b/parser/parser_test.go
31new file mode 100644
32index 0000000000000000000000000000000000000000..aa43255597809c783840abf0bc9796c962b84af7
33--- /dev/null
34+++ b/parser/parser_test.go
35@@ -0,0 +1,20 @@
36+package parser_test
37+
38+import (
39+ "os"
40+ "testing"
41+
42+ "github.com/TheEdgeOfRage/logfmt/config"
43+ "github.com/TheEdgeOfRage/logfmt/parser"
44+)
45+
46+func TestParseInvalidFile(t *testing.T) {
47+ f, err := os.Open("../testdata/log.txt")
48+ if err != nil {
49+ t.Fatal(err)
50+ }
51+ p := parser.NewParser(&config.Config{}, f, os.Stdout)
52+ if err := p.Start(); err == nil {
53+ t.Error("expected error, got nil")
54+ }
55+}
56diff --git a/testdata/log.txt b/testdata/log.txt
57new file mode 100644
58index 0000000000000000000000000000000000000000..ba4eeb4c793e08faa5fd8f2921b2f943d14cee39
59--- /dev/null
60+++ b/testdata/log.txt
61@@ -0,0 +1,7 @@
62+time="2025-03-15T10:32:23.099371324+01:00" level=info msg="loading plugin" id=io.containerd.snapshotter.v1.btrfs type=io.containerd.snapshotter.v1
63+time="2025-03-15T10:32:23.100260643+01:00" level=info msg="loading plugin" id=io.containerd.snapshotter.v1.devmapper type=io.containerd.snapshotter.v1
64+time="2025-03-15T10:32:23.100277101+01:00" level=info msg="skip loading plugin" error="devmapper not configured: skip plugin" id=io.containerd.snapshotter.v1.devmapper type=io.containerd.snapshotter.v1
65+time="2025-03-15T10:32:23.100288611+01:00" level=info msg="loading plugin" id=io.containerd.snapshotter.v1.native type=io.containerd.snapshotter.v1
66+time="2025-03-15T10:32:23.100391684+01:00" level=info msg="loading plugin" id=io.containerd.snapshotter.v1.overlayfs type=io.containerd.snapshotter.v1
67+time="2025-03-15T10:32:23.100625849+01:00" level=info msg="loading plugin" id=io.containerd.snapshotter.v1.zfs type=io.containerd.snapshotter.v1
68+time="