blob: 6d97e6a195c7843b174e555b53a7475c22e25805 [file] [log] [blame]
Robin Thellend92b65a42014-12-17 14:30:16 -08001package ipc_test
2
3import (
4 "fmt"
5 "testing"
6 "time"
7
8 "veyron.io/veyron/veyron2/naming"
9 "veyron.io/veyron/veyron2/rt"
10
11 "veyron.io/veyron/veyron/lib/expect"
12 "veyron.io/veyron/veyron/lib/modules"
13 "veyron.io/veyron/veyron/lib/modules/core"
14 iipc "veyron.io/veyron/veyron/runtimes/google/ipc"
15 inaming "veyron.io/veyron/veyron/runtimes/google/naming"
16)
17
18func startMT(t *testing.T, sh *modules.Shell) string {
19 h, err := sh.Start(core.RootMTCommand, nil, "--", "--veyron.tcp.address=127.0.0.1:0")
20 if err != nil {
21 t.Fatalf("unexpected error for root mt: %s", err)
22 }
23 s := expect.NewSession(t, h.Stdout(), time.Minute)
24 s.ExpectVar("PID")
25 return s.ExpectVar("MT_NAME")
26}
27
28func TestResolveToEndpoint(t *testing.T) {
29 sh, err := modules.NewShell(nil)
30 if err != nil {
31 t.Fatalf("modules.NewShell failed: %s", err)
32 }
33 defer sh.Cleanup(nil, nil)
34 root := startMT(t, sh)
35
36 runtime, err := rt.New()
37 if err != nil {
38 t.Fatalf("rt.New failed: %s", err)
39 }
40 defer runtime.Cleanup()
41 ns := runtime.Namespace()
42 ns.SetRoots(root)
43
44 proxyEp, _ := inaming.NewEndpoint("proxy.v.io:123")
45 proxyEpStr := proxyEp.String()
46 proxyAddr := naming.JoinAddressName(proxyEpStr, "")
47 if err := ns.Mount(runtime.NewContext(), "proxy", proxyAddr, time.Hour); err != nil {
48 t.Fatalf("ns.Mount failed: %s", err)
49 }
50
51 server, err := runtime.NewServer()
52 if err != nil {
53 t.Fatalf("runtime.NewServer failed: %s", err)
54 }
55
56 notfound := fmt.Errorf("not found")
57 testcases := []struct {
58 address string
59 result string
60 err error
61 }{
62 {"/proxy.v.io:123", proxyEpStr, nil},
63 {"proxy.v.io:123", "", notfound},
64 {"proxy", proxyEpStr, nil},
65 {naming.JoinAddressName(root, "proxy"), proxyEpStr, nil},
66 {proxyAddr, proxyEpStr, nil},
67 {proxyEpStr, "", notfound},
68 {"unknown", "", notfound},
69 }
70 for _, tc := range testcases {
71 result, err := iipc.InternalServerResolveToEndpoint(server, tc.address)
72 if (err == nil) != (tc.err == nil) {
73 t.Errorf("Unexpected err for %q. Got %v, expected %v", tc.address, err, tc.err)
74 }
75 if result != tc.result {
76 t.Errorf("Unexpected result for %q. Got %q, expected %q", tc.address, result, tc.result)
77 }
78 }
79 if t.Failed() {
80 t.Logf("proxyEpStr: %v", proxyEpStr)
81 t.Logf("proxyAddr: %v", proxyAddr)
82 }
83}