394f26d0736c860e4e1fee69f5eb8bdc83595a96

Author
Denys Vitali <denys@denv.it>
Committer
GitHub <noreply@github.com>
Date

Message

fix: throw parser errors when they happen (#3)

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="