commit fd70e85401106c582dc0fec8f46fab95929b5cd9
parent 6d03941510e48ebda419bb5e7695d3db17a6d2e3
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sun, 8 Oct 2023 05:38:24 +0900
divide test function
Diffstat:
2 files changed, 43 insertions(+), 32 deletions(-)
diff --git a/client.go b/client.go
@@ -136,6 +136,7 @@ func (c *Client) Version(ctx context.Context, mSize uint32, version string) (*RV
case err := <-errc:
return nil, err
case <-ctx.Done():
+ // TODO: destroy clientReq.
return nil, fmt.Errorf("wait transaction: %w", ctx.Err())
}
}
diff --git a/client_test.go b/client_test.go
@@ -2,6 +2,7 @@ package lib9p
import (
"context"
+ "fmt"
"io"
"reflect"
"sync"
@@ -28,54 +29,63 @@ func newClientForTest() (*Client, chan<- Msg, chan<- error) {
return c, tmsgc, rerrc
}
+type msgTest struct {
+ name string
+ msg Msg
+ reply Msg
+ wantmsg Msg
+ wanterr error
+}
+
+func dummyTransact(test msgTest) (gotmsg Msg, goterr error) {
+ c, _, _ := newClientForTest()
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ switch m := test.msg.(type) {
+ case *TVersion:
+ gotmsg, goterr = c.Version(context.Background(), m.mSize, m.version)
+ default:
+ goterr = fmt.Errorf("unknown msg type: %v", m)
+ }
+ wg.Done()
+ }()
+
+ var ok bool
+ var req *clientReq
+ for !ok {
+ req, ok = c.rPool.lookup(NOTAG)
+ }
+ req.rmsgc <- test.reply
+ close(req.errc)
+ close(req.rmsgc)
+
+ wg.Wait()
+ return gotmsg, goterr
+}
+
func TestClientVersion(t *testing.T) {
- tests := []struct{
- name string
- msg *TVersion
- reply Msg
- wantmsg *RVersion
- wanterr error
- }{
+ tests := []msgTest{
{
"valid",
- &TVersion{0, mSize, "9P2000"},
+ &TVersion{NOTAG, mSize, "9P2000"},
&RVersion{NOTAG, mSize, "9P2000"},
&RVersion{NOTAG, mSize, "9P2000"},
nil,
},
{
"invalid",
- &TVersion{0, mSize, "unko"},
+ &TVersion{NOTAG, mSize, "unko"},
&RVersion{NOTAG, mSize, "unknown"},
&RVersion{NOTAG, mSize, "unknown"},
nil,
},
}
for _, test := range tests {
- c, _, _ := newClientForTest()
- var (
- gotmsg *RVersion
- goterr error
- wg sync.WaitGroup
- )
- wg.Add(1)
- go func() {
- gotmsg, goterr = c.Version(context.Background(), test.msg.mSize, test.msg.version)
- wg.Done()
- }()
-
- var ok bool
- var req *clientReq
- for !ok {
- req, ok = c.rPool.lookup(NOTAG)
- }
- req.rmsgc <- test.reply
- close(req.errc)
- close(req.rmsgc)
-
- wg.Wait()
+ gotmsg, goterr := dummyTransact(test)
if !reflect.DeepEqual(gotmsg, test.wantmsg) || !reflect.DeepEqual(goterr, test.wanterr) {
- t.Errorf("%s: got: (%v, %v), want: (%v, %v)\n", test.name, gotmsg, goterr,
+ t.Errorf("%s: got: (%v, %v), want: (%v, %v)\n",
+ test.name, gotmsg, goterr,
test.wantmsg, test.wanterr)
}
}