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  }