go-hep.org/x/hep@v0.38.1/xrootd/main_mock_test.go (about) 1 // Copyright ©2018 The go-hep Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package xrootd // import "go-hep.org/x/hep/xrootd" 6 7 import ( 8 "context" 9 "fmt" 10 "net" 11 12 "go-hep.org/x/hep/xrootd/internal/mux" 13 "go-hep.org/x/hep/xrootd/internal/xrdenc" 14 "go-hep.org/x/hep/xrootd/xrdproto" 15 "go-hep.org/x/hep/xrootd/xrdproto/signing" 16 ) 17 18 var testClientAddrs []string 19 20 func testClientWithMockServer(serverFunc func(cancel func(), conn net.Conn), clientFunc func(cancel func(), client *Client)) { 21 ctx, cancel := context.WithCancel(context.Background()) 22 defer cancel() 23 24 server, conn := net.Pipe() 25 defer server.Close() 26 defer conn.Close() 27 28 client := &Client{cancel: cancel, sessions: make(map[string]*cliSession), maxRedirections: 8} 29 session := &cliSession{cancel: cancel, ctx: ctx, conn: conn, mux: mux.New(), requests: make(map[xrdproto.StreamID]pendingRequest), client: client, signRequirements: signing.Default()} 30 client.initialSessionID = "test.org:1234" 31 client.sessions[client.initialSessionID] = session 32 defer client.Close() 33 34 go serverFunc(func() { client.Close() }, server) 35 go session.consume() 36 37 clientFunc(cancel, client) 38 } 39 40 func unmarshalRequest(data []byte, request xrdproto.Request) (xrdproto.RequestHeader, error) { 41 var header xrdproto.RequestHeader 42 rBuffer := xrdenc.NewRBuffer(data) 43 44 if err := header.UnmarshalXrd(rBuffer); err != nil { 45 return xrdproto.RequestHeader{}, err 46 } 47 if header.RequestID != request.ReqID() { 48 return xrdproto.RequestHeader{}, fmt.Errorf("xrootd: unexpected request id was specified:\nwant = %d\ngot = %d\n", request.ReqID(), header.RequestID) 49 } 50 if err := request.UnmarshalXrd(rBuffer); err != nil { 51 return xrdproto.RequestHeader{}, err 52 } 53 54 return header, nil 55 }