Skip to content

Commit 8b549f8

Browse files
authored
fix: discover handler errors for lint (#1677)
Signed-off-by: Terry Howe <[email protected]>
1 parent b06197d commit 8b549f8

File tree

3 files changed

+103
-10
lines changed

3 files changed

+103
-10
lines changed

cmd/oras/internal/display/metadata/table/discover.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,30 @@ func (h *discoverHandler) OnDiscovered(referrer, subject ocispec.Descriptor) err
5555
}
5656

5757
// Render implements metadata.DiscoverHandler.
58-
func (h *discoverHandler) Render() error {
58+
func (h *discoverHandler) Render() (err error) {
5959
if n := len(h.referrers); n != 1 {
60-
fmt.Fprintln(h.out, "Discovered", n, "artifacts referencing", h.rawReference)
60+
_, err = fmt.Fprintln(h.out, "Discovered", n, "artifacts referencing", h.rawReference)
6161
} else {
62-
fmt.Fprintln(h.out, "Discovered", n, "artifact referencing", h.rawReference)
62+
_, err = fmt.Fprintln(h.out, "Discovered", n, "artifact referencing", h.rawReference)
63+
}
64+
if err != nil {
65+
return err
66+
}
67+
_, err = fmt.Fprintln(h.out, "Digest:", h.root.Digest)
68+
if err != nil {
69+
return err
6370
}
64-
fmt.Fprintln(h.out, "Digest:", h.root.Digest)
6571
if len(h.referrers) == 0 {
6672
return nil
6773
}
68-
fmt.Fprintln(h.out)
74+
_, err = fmt.Fprintln(h.out)
75+
if err != nil {
76+
return err
77+
}
6978
return h.printDiscoveredReferrersTable()
7079
}
7180

72-
func (h *discoverHandler) printDiscoveredReferrersTable() error {
81+
func (h *discoverHandler) printDiscoveredReferrersTable() (err error) {
7382
typeNameTitle := "Artifact Type"
7483
typeNameLength := len(typeNameTitle)
7584
for _, ref := range h.referrers {
@@ -78,13 +87,20 @@ func (h *discoverHandler) printDiscoveredReferrersTable() error {
7887
}
7988
}
8089

81-
print := func(key string, value interface{}) {
82-
fmt.Fprintln(h.out, key, strings.Repeat(" ", typeNameLength-len(key)+1), value)
90+
printKey := func(key string, value interface{}) (err error) {
91+
_, err = fmt.Fprintln(h.out, key, strings.Repeat(" ", typeNameLength-len(key)+1), value)
92+
return err
8393
}
8494

85-
print(typeNameTitle, "Digest")
95+
err = printKey(typeNameTitle, "Digest")
96+
if err != nil {
97+
return err
98+
}
8699
for _, ref := range h.referrers {
87-
print(ref.ArtifactType, ref.Digest)
100+
err = printKey(ref.ArtifactType, ref.Digest)
101+
if err != nil {
102+
return err
103+
}
88104
if h.verbose {
89105
if err := output.PrintPrettyJSON(h.out, ref); err != nil {
90106
return fmt.Errorf("error printing JSON: %w", err)

cmd/oras/internal/display/metadata/table/discover_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020
"testing"
2121

2222
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
23+
24+
"oras.land/oras/internal/testutils"
2325
)
2426

2527
func TestTableDiscoverHandler_OneReferrer(t *testing.T) {
@@ -138,3 +140,36 @@ func TestTableDiscoverHandler_Failure(t *testing.T) {
138140
t.Errorf("Expected error <%s> actual error <%s>", expected, err.Error())
139141
}
140142
}
143+
144+
func Test_discoverHandler_Render(t *testing.T) {
145+
root := ocispec.Descriptor{Digest: "root"}
146+
one := ocispec.Descriptor{ArtifactType: ocispec.MediaTypeImageLayer, Digest: "one"}
147+
two := ocispec.Descriptor{ArtifactType: ocispec.MediaTypeImageLayer, Digest: "two"}
148+
149+
tests := []struct {
150+
wf *testutils.WriteFailure
151+
}{
152+
{wf: testutils.NewWriteFailure(1)},
153+
{wf: testutils.NewWriteFailure(2)},
154+
{wf: testutils.NewWriteFailure(3)},
155+
{wf: testutils.NewWriteFailure(4)},
156+
{wf: testutils.NewWriteFailure(5)},
157+
}
158+
for _, tt := range tests {
159+
t.Run(tt.wf.Expected(), func(t *testing.T) {
160+
tdh := &discoverHandler{
161+
out: tt.wf,
162+
rawReference: "rawRef",
163+
root: root,
164+
verbose: true,
165+
referrers: []ocispec.Descriptor{one, two},
166+
}
167+
err := tdh.Render()
168+
if err == nil {
169+
t.Errorf("OnDiscovered() Expected error <%s>", tt.wf.Expected())
170+
} else if err.Error() != tt.wf.Expected() {
171+
t.Errorf("Expected error <%s> actual error <%s>", tt.wf.Expected(), err.Error())
172+
}
173+
})
174+
}
175+
}

internal/testutils/writer_failure.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
Copyright The ORAS Authors.
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing, software
10+
distributed under the License is distributed on an "AS IS" BASIS,
11+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
See the License for the specific language governing permissions and
13+
limitations under the License.
14+
*/
15+
16+
package testutils
17+
18+
import "fmt"
19+
20+
type WriteFailure struct {
21+
count int
22+
err error
23+
}
24+
25+
func NewWriteFailure(count int) *WriteFailure {
26+
return &WriteFailure{
27+
count: count,
28+
err: fmt.Errorf("failed on %d", count),
29+
}
30+
}
31+
32+
func (wf *WriteFailure) Write(p []byte) (n int, err error) {
33+
wf.count = wf.count - 1
34+
if wf.count <= 0 {
35+
return 0, wf.err
36+
}
37+
return len(p), nil
38+
}
39+
40+
func (wf *WriteFailure) Expected() string {
41+
return wf.err.Error()
42+
}

0 commit comments

Comments
 (0)