Skip to content

Commit 0ff9f70

Browse files
committed
Refactor IPC
1 parent d7b3bb3 commit 0ff9f70

4 files changed

Lines changed: 43 additions & 22 deletions

File tree

cmd/boring/tunnels.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,11 @@ func transmitCmd(cmd daemon.Cmd, resp any) error {
226226
}
227227
defer conn.Close()
228228

229-
if err := ipc.Send(cmd, conn); err != nil {
229+
if err := ipc.Write(cmd, conn); err != nil {
230230
return fmt.Errorf("could not send command: %v", err)
231231
}
232232

233-
if err = ipc.Receive(resp, conn); err != nil {
233+
if err = ipc.Read(resp, conn); err != nil {
234234
return fmt.Errorf("could not receive response: %v", err)
235235
}
236236

internal/daemon/daemon.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,17 @@ func respond(conn net.Conn, err *error) {
4747
if *err != nil {
4848
resp = Resp{Success: false, Error: (*err).Error()}
4949
}
50-
if err := ipc.Send(resp, conn); err != nil {
50+
if err := ipc.Write(resp, conn); err != nil {
5151
log.Errorf("could not send response: %v", err)
5252
}
5353
}
5454

5555
func (d *daemon) handleConnection(conn net.Conn) {
5656
defer conn.Close()
5757

58-
// Receive command
58+
// Read command
5959
var cmd Cmd
60-
if err := ipc.Receive(&cmd, conn); err != nil {
60+
if err := ipc.Read(&cmd, conn); err != nil {
6161
// Ignore cases where client aborts connection
6262
if !errors.Is(err, io.EOF) {
6363
log.Errorf("Could not receive command: %v", err)
@@ -142,7 +142,7 @@ func (d *daemon) listTunnels(conn net.Conn) {
142142
d.mutex.RUnlock()
143143

144144
resp := Resp{Success: true, Tunnels: m}
145-
if err := ipc.Send(resp, conn); err != nil {
145+
if err := ipc.Write(resp, conn); err != nil {
146146
log.Errorf("could not send response: %v", err)
147147
}
148148
}

internal/ipc/ipc.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,30 @@ import (
44
"bufio"
55
"encoding/json"
66
"fmt"
7-
"net"
7+
"io"
88

99
"github.com/alebeck/boring/internal/log"
1010
)
1111

12-
func Send(s any, conn net.Conn) error {
12+
func Write(s any, w io.Writer) error {
1313
data, err := json.Marshal(s)
1414
if err != nil {
1515
return fmt.Errorf("failed to serialize: %v", err)
1616
}
1717
log.Debugf("Sending: %v", string(data))
1818

19-
_, err = conn.Write(append(data, '\n'))
19+
_, err = w.Write(append(data, '\n'))
2020
if err != nil {
21-
return fmt.Errorf("failed to send: %v", err)
21+
return fmt.Errorf("failed to write: %v", err)
2222
}
2323
return nil
2424
}
2525

26-
func Receive(s any, conn net.Conn) error {
27-
reader := bufio.NewReader(conn)
28-
data, err := reader.ReadBytes('\n')
26+
func Read(s any, r io.Reader) error {
27+
br := bufio.NewReader(r)
28+
data, err := br.ReadBytes('\n')
2929
if err != nil {
30-
return fmt.Errorf("failed to read from connection: %w", err)
30+
return fmt.Errorf("failed to read: %w", err)
3131
}
3232
log.Debugf("Received: %v", string(data))
3333

internal/ipc/ipc_test.go

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package ipc
22

33
import (
4-
"github.com/alebeck/boring/internal/log"
4+
"io"
55
"net"
66
"os"
77
"reflect"
8+
"strings"
89
"testing"
910
"time"
11+
12+
"github.com/alebeck/boring/internal/log"
1013
)
1114

1215
func TestMain(m *testing.M) {
@@ -29,36 +32,54 @@ func TestIPC(t *testing.T) {
2932
go func() {
3033
defer close(done)
3134
var r map[string]string
32-
if err := Receive(&r, c2); err != nil {
35+
if err := Read(&r, c2); err != nil {
3336
t.Errorf("receive failed: %v", err)
3437
}
3538
if !reflect.DeepEqual(obj, r) {
3639
t.Errorf("wrong data: %v != %v", obj, r)
3740
}
3841
}()
3942

40-
if err := Send(obj, c1); err != nil {
43+
if err := Write(obj, c1); err != nil {
4144
t.Fatalf("send failed: %v", err)
4245
}
4346
<-done
4447
}
4548

46-
func TestSendError(t *testing.T) {
47-
obj := map[string]string{"foo": "bar"}
49+
func TestWriteError(t *testing.T) {
50+
var obj int
4851
c1, c2 := net.Pipe()
4952
defer c1.Close()
5053
c2.Close() // peer closed
51-
if err := Send(obj, c1); err == nil {
54+
if err := Write(obj, c1); err == nil ||
55+
!strings.Contains(err.Error(), "failed to write") {
5256
t.Fatalf("did not get expected error")
5357
}
5458
}
5559

56-
func TestReceiveError(t *testing.T) {
60+
func TestReadError(t *testing.T) {
5761
var obj map[string]string
5862
c1, c2 := net.Pipe()
5963
defer c1.Close()
6064
c2.Close() // peer closed
61-
if err := Receive(&obj, c1); err == nil {
65+
if err := Read(&obj, c1); err == nil ||
66+
!strings.Contains(err.Error(), "failed to read") {
67+
t.Fatalf("did not get expected error")
68+
}
69+
}
70+
71+
func TestSerializeError(t *testing.T) {
72+
var v = make(chan int) // not serializable
73+
if err := Write(v, io.Discard); err == nil ||
74+
!strings.Contains(err.Error(), "failed to serialize") {
75+
t.Fatalf("did not get expected error")
76+
}
77+
}
78+
79+
func TestDeserializeError(t *testing.T) {
80+
var v = make(chan int) // not serializable
81+
if err := Read(&v, strings.NewReader("test\n")); err == nil ||
82+
!strings.Contains(err.Error(), "failed to deserialize") {
6283
t.Fatalf("did not get expected error")
6384
}
6485
}

0 commit comments

Comments
 (0)