blob: 9b86b1052f99eb284dd5f731c35048928af1cab7 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main_test
import (
"fmt"
"os"
"regexp"
"v.io/x/ref"
"v.io/x/ref/test/v23tests"
)
//go:generate v23 test generate
func getHostname(i *v23tests.T) string {
if hostname, err := os.Hostname(); err != nil {
i.Fatalf("Hostname() failed: %v", err)
return ""
} else {
return hostname
}
}
func binaryWithCredentials(i *v23tests.T, extension, pkgpath string) *v23tests.Binary {
creds, err := i.Shell().NewChildCredentials(extension)
if err != nil {
i.Fatalf("NewCustomCredentials (for %q) failed: %v", pkgpath, err)
}
b := i.BuildV23Pkg(pkgpath)
return b.WithStartOpts(b.StartOpts().WithCustomCredentials(creds))
}
func V23TestMount(i *v23tests.T) {
neighborhood := fmt.Sprintf("test-%s-%d", getHostname(i), os.Getpid())
v23tests.RunRootMT(i, "--v23.tcp.address=127.0.0.1:0", "--neighborhood-name="+neighborhood)
name, _ := i.GetVar(ref.EnvNamespacePrefix)
clientBin := binaryWithCredentials(i, "cmd", "v.io/x/ref/cmd/mounttable")
// Get the neighborhood endpoint from the mounttable.
neighborhoodEndpoint := clientBin.Start("glob", name, "nh").ExpectSetEventuallyRE(`^nh (.*) \(Deadline .*\)$`)[0][1]
if err := clientBin.Start("mount", name+"/myself", name, "5m").Wait(os.Stdout, os.Stderr); err != nil {
i.Fatalf("failed to mount the mounttable on itself: %v", err)
}
if err := clientBin.Start("mount", name+"/google", "/www.google.com:80", "5m").Wait(os.Stdout, os.Stderr); err != nil {
i.Fatalf("failed to mount www.google.com: %v", err)
}
// Test glob output. We expect three entries (two we mounted plus the
// neighborhood). The 'myself' entry should be the IP:port we
// specified for the mounttable.
glob := clientBin.Start("glob", name, "*")
matches := glob.ExpectSetEventuallyRE(
`^google /www\.google\.com:80 \(Deadline .*\)$`,
`^myself (.*) \(Deadline .*\)$`,
`^nh `+regexp.QuoteMeta(neighborhoodEndpoint)+` \(Deadline .*\)$`)
if matches[1][1] != name {
i.Fatalf("expected 'myself' entry to be %q, but was %q", name, matches[1][1])
}
// Test globbing on the neighborhood name. Its endpoint should be the
// endpoint of the mount table.
glob = clientBin.Start("glob", "/"+neighborhoodEndpoint, neighborhood)
matches = glob.ExpectSetEventuallyRE("^" + regexp.QuoteMeta(neighborhood) + ` (.*) \(Deadline .*\)$`)
if matches[0][1] != name {
i.Fatalf("expected endpoint of mount table for name %s", neighborhood)
}
}