Skip to content

Instantly share code, notes, and snippets.

@daniel-garcia
Created August 15, 2014 21:13
Show Gist options
  • Save daniel-garcia/78926282aeb461c08de1 to your computer and use it in GitHub Desktop.
Save daniel-garcia/78926282aeb461c08de1 to your computer and use it in GitHub Desktop.
// server.go
package main
import (
"fmt"
"log"
"net"
"net/rpc"
"testing"
)
type Args struct {
X *int
Y *int
}
type Calculator struct{}
func (t *Calculator) Add(args Args, reply *int) error {
if args.X == nil && args.Y == nil {
return fmt.Errorf("X and Y are nil")
}
if args.X == nil {
return fmt.Errorf("X is nil")
}
if args.Y == nil {
return fmt.Errorf("Y is nil")
}
*reply = *args.X + *args.Y
return nil
}
func server(listener net.Listener) {
cal := new(Calculator)
rpc.Register(cal)
for {
if conn, err := listener.Accept(); err != nil {
log.Fatal("accept error: " + err.Error())
} else {
log.Printf("new connection established\n")
go rpc.ServeConn(conn)
}
}
}
func TestRPCNil(t *testing.T) {
listener, err := net.Listen("tcp", ":1234")
if err != nil {
t.Fatalf("Could not listen: %s", err)
}
go server(listener)
client, err := rpc.Dial("tcp", "127.0.0.1:1234")
if err != nil {
t.Fatal("dialing:", err)
}
zero := 0
seven := 7
eight := 8
args := Args{&seven, &eight}
var reply int
err = client.Call("Calculator.Add", args, &reply)
if err != nil {
t.Fatal("arith error:", err)
}
t.Logf("Result: %d+%d=%d", *args.X, *args.Y, reply)
args = Args{&zero,&seven}
err = client.Call("Calculator.Add", args, &reply)
if err != nil {
t.Fatal("arith error:", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment