diff --git a/utils/server_test.go b/utils/server_test.go new file mode 100644 index 000000000..a022b2cb0 --- /dev/null +++ b/utils/server_test.go @@ -0,0 +1,57 @@ +/* +Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments +Copyright (C) ITsysCOM GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package utils + +import ( + "net" + "net/rpc" + "net/rpc/jsonrpc" + "testing" +) + +func TestServerTestMock(t *testing.T) { + ln, err := net.Listen("tcp", ":0") // will pick a free port number automatically + if err != nil { + t.Fatal(err) + } + go func() { + for range 2 { + conn, err := ln.Accept() + if err != nil { + t.Error(err) + } + rpc.ServeCodec(jsonrpc.NewServerCodec(conn)) + } + }() + client, err := jsonrpc.Dial("tcp", ln.Addr().String()) + if err != nil { + t.Fatal(err) + } + defer client.Close() + wantErr := "rpc: can't find service _goRPC_.Cancel" + serviceMethod := "_goRPC_.Cancel" + var reply bool + if err = client.Call(serviceMethod, nil, &reply); err == nil || err.Error() != wantErr { + t.Errorf("client.Call(%q) err = %v, want %v", serviceMethod, err, wantErr) + } + NewServer() + if err = client.Call(serviceMethod, nil, &reply); err != nil { + t.Fatalf("client.Call(%q) returned unexpected error: %v", serviceMethod, err) + } +}