lib9p

Go 9P library.
Log | Files | Refs

commit fd70e85401106c582dc0fec8f46fab95929b5cd9
parent 6d03941510e48ebda419bb5e7695d3db17a6d2e3
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun,  8 Oct 2023 05:38:24 +0900

divide test function

Diffstat:
Mclient.go | 1+
Mclient_test.go | 74++++++++++++++++++++++++++++++++++++++++++--------------------------------
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) } }