github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/rpcclientpool/usage_test.go (about)

     1  package rpcclientpool
     2  
     3  import (
     4  	"net"
     5  	"net/http"
     6  	"net/rpc"
     7  	"testing"
     8  
     9  	"github.com/Cloud-Foundations/Dominator/lib/resourcepool"
    10  )
    11  
    12  var serverAddress string
    13  
    14  func init() {
    15  	rpc.HandleHTTP()
    16  	listener, err := net.Listen("tcp", "localhost:")
    17  	if err != nil {
    18  		panic(err)
    19  	}
    20  	serverAddress = listener.Addr().String()
    21  	go http.Serve(listener, nil)
    22  }
    23  
    24  func TestGetCallPut(t *testing.T) {
    25  	cr := New("tcp", serverAddress, true, "")
    26  	client, err := cr.Get(resourcepool.MakeImmediateCanceler())
    27  	if err != nil {
    28  		t.Error(err)
    29  		return
    30  	}
    31  	var request, reply int
    32  	client.Call("Service.Method", request, &reply)
    33  	client.Put()
    34  }
    35  
    36  func TestGetClosePut(t *testing.T) {
    37  	cr := New("tcp", serverAddress, true, "")
    38  	client, err := cr.Get(resourcepool.MakeImmediateCanceler())
    39  	if err != nil {
    40  		t.Error(err)
    41  		return
    42  	}
    43  	if err := client.Close(); err != nil {
    44  		t.Error(err)
    45  	}
    46  	client.Put()
    47  }
    48  
    49  func TestGetPutPut(t *testing.T) {
    50  	cr := New("tcp", serverAddress, true, "")
    51  	client, err := cr.Get(resourcepool.MakeImmediateCanceler())
    52  	if err != nil {
    53  		t.Error(err)
    54  		return
    55  	}
    56  	client.Put()
    57  	defer func() {
    58  		if err := recover(); err == nil {
    59  			t.Errorf("Multiple Put() did not panic")
    60  		}
    61  	}()
    62  	client.Put()
    63  }
    64  
    65  func TestCallAfterPut(t *testing.T) {
    66  	cr := New("tcp", serverAddress, true, "")
    67  	client, err := cr.Get(resourcepool.MakeImmediateCanceler())
    68  	if err != nil {
    69  		t.Error(err)
    70  		return
    71  	}
    72  	client.Put()
    73  	defer func() {
    74  		if err := recover(); err == nil {
    75  			t.Errorf("Call() after Put() did not panic")
    76  		}
    77  	}()
    78  	var request, reply int
    79  	err = client.Call("Service.Method", request, &reply)
    80  	t.Error(err)
    81  }
    82  
    83  func TestCallAfterClose(t *testing.T) {
    84  	cr := New("tcp", serverAddress, true, "")
    85  	client, err := cr.Get(resourcepool.MakeImmediateCanceler())
    86  	if err != nil {
    87  		t.Error(err)
    88  		return
    89  	}
    90  	client.Close()
    91  	defer func() {
    92  		if err := recover(); err == nil {
    93  			t.Errorf("Call() after Close() did not panic")
    94  		}
    95  	}()
    96  	var request, reply int
    97  	err = client.Call("Service.Method", request, &reply)
    98  	t.Error(err)
    99  }