Skip to content

Commit d345582

Browse files
committed
don't return copied errors from Copy
We _copy_ the error to the response, we only need to return errors encountered when copying. fixes ipfs#148
1 parent 8d99209 commit d345582

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

responseemitter.go

+1-6
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,7 @@ func Copy(re ResponseEmitter, res Response) error {
6161
return re.Close()
6262
}
6363

64-
closeErr := re.CloseWithError(err)
65-
if closeErr != nil {
66-
log.Errorf("error closing emitter with error %q: %s", err, closeErr)
67-
}
68-
69-
return err
64+
return re.CloseWithError(err)
7065
}
7166

7267
err = re.Emit(v)

responseemitter_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package cmds
22

33
import (
44
"context"
5+
"fmt"
56
"io"
67
"testing"
78

@@ -51,6 +52,51 @@ func TestCopy(t *testing.T) {
5152
}
5253
}
5354

55+
func TestCopyError(t *testing.T) {
56+
req, err := NewRequest(context.Background(), nil, nil, nil, nil, &Command{})
57+
if err != nil {
58+
t.Fatal(err)
59+
}
60+
61+
fooErr := fmt.Errorf("foo")
62+
63+
re1, res1 := NewChanResponsePair(req)
64+
re2, res2 := NewChanResponsePair(req)
65+
66+
go func() {
67+
err := Copy(re2, res1)
68+
if err != nil {
69+
t.Fatal(err)
70+
}
71+
}()
72+
go func() {
73+
err := re1.Emit("test")
74+
if err != nil {
75+
t.Fatal(err)
76+
}
77+
78+
err = re1.CloseWithError(fooErr)
79+
if err != nil {
80+
t.Fatal(err)
81+
}
82+
}()
83+
84+
v, err := res2.Next()
85+
if err != nil {
86+
t.Fatal(err)
87+
}
88+
89+
str := v.(string)
90+
if str != "test" {
91+
t.Fatalf("expected string %#v but got %#v", "test", str)
92+
}
93+
94+
_, err = res2.Next()
95+
if err != fooErr {
96+
t.Fatalf("expected fooErr but got err=%v", err)
97+
}
98+
}
99+
54100
func TestError(t *testing.T) {
55101
req, err := NewRequest(context.Background(), nil, nil, nil, nil, &Command{})
56102
if err != nil {

0 commit comments

Comments
 (0)