github.com/Cloud-Foundations/Dominator@v0.3.4/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 }