blob: 460cd83d2df9f385ed466e2fac22058110ba4eae [file] [log] [blame]
package impl_test
import (
"bytes"
"strings"
"testing"
"veyron/tools/proximity/impl"
"veyron2"
"veyron2/ipc"
"veyron2/naming"
"veyron2/rt"
"veyron2/security"
"veyron2/services/proximity"
"veyron2/vlog"
)
type server struct {
}
func (s *server) RegisterName(_ ipc.ServerContext, name string) error {
vlog.VI(2).Infof("RegisterName(%q) was called", name)
return nil
}
func (s *server) UnregisterName(_ ipc.ServerContext, name string) error {
vlog.VI(2).Infof("UnregisterName(%q) was called", name)
return nil
}
func (s *server) NearbyDevices(_ ipc.ServerContext) ([]proximity.Device, error) {
vlog.VI(2).Info("NearbyDevices() was called")
devices := []proximity.Device{
{MAC: "xx:xx:xx:xx:xx:xx", Names: []string{"name1", "name2"}, Distance: "1m"},
{MAC: "yy:yy:yy:yy:yy:yy", Names: []string{"name3"}, Distance: "2m"},
}
return devices, nil
}
type dispatcher struct {
}
func (d *dispatcher) Lookup(suffix string) (ipc.Invoker, security.Authorizer, error) {
invoker := ipc.ReflectInvoker(proximity.NewServerProximity(&server{}))
return invoker, nil, nil
}
func startServer(t *testing.T, r veyron2.Runtime) (ipc.Server, naming.Endpoint, error) {
dispatcher := &dispatcher{}
server, err := r.NewServer()
if err != nil {
t.Errorf("NewServer failed: %v", err)
return nil, nil, err
}
endpoint, err := server.Listen("tcp", "localhost:0")
if err != nil {
t.Errorf("Listen failed: %v", err)
return nil, nil, err
}
if err := server.Serve("", dispatcher); err != nil {
t.Errorf("Serve failed: %v", err)
return nil, nil, err
}
return server, endpoint, nil
}
func stopServer(t *testing.T, server ipc.Server) {
if err := server.Stop(); err != nil {
t.Errorf("server.Stop failed: %v", err)
}
}
func TestProximityClient(t *testing.T) {
runtime := rt.Init()
server, endpoint, err := startServer(t, runtime)
if err != nil {
return
}
defer stopServer(t, server)
// Setup the command-line.
cmd := impl.Root()
var stdout, stderr bytes.Buffer
cmd.Init(nil, &stdout, &stderr)
address := naming.JoinAddressName(endpoint.String(), "")
// Test the 'register' command.
if err := cmd.Execute([]string{"register", address, "myname"}); err != nil {
t.Fatalf("%v", err)
}
if expected, got := "Name registered successfully", strings.TrimSpace(stdout.String()); got != expected {
t.Errorf("Got %q, expected %q", got, expected)
}
stdout.Reset()
// Test the 'unregister' command.
if err := cmd.Execute([]string{"unregister", address, "myname"}); err != nil {
t.Fatalf("%v", err)
}
if expected, got := "Name unregistered successfully", strings.TrimSpace(stdout.String()); got != expected {
t.Errorf("Got %q, expected %q", got, expected)
}
stdout.Reset()
// Test the 'nearbydevices' command.
if err := cmd.Execute([]string{"nearbydevices", address}); err != nil {
t.Fatalf("%v", err)
}
if expected, got := "Nearby Devices:\n0: MAC=xx:xx:xx:xx:xx:xx Names=[name1 name2] Distance=1m\n1: MAC=yy:yy:yy:yy:yy:yy Names=[name3] Distance=2m", strings.TrimSpace(stdout.String()); got != expected {
t.Errorf("Got %q, expected %q", got, expected)
}
stdout.Reset()
}