blob: 7c1c135a530edc36e9dc26919d7d5ca977f85b29 [file] [log] [blame]
package mounttable
import (
"fmt"
"reflect"
"testing"
"time"
"v.io/core/veyron2/naming"
"v.io/core/veyron2/security"
)
type fakeTime struct {
theTime time.Time
}
func (ft *fakeTime) now() time.Time {
return ft.theTime
}
func (ft *fakeTime) advance(d time.Duration) {
ft.theTime = ft.theTime.Add(d)
}
func NewFakeTimeClock() *fakeTime {
return &fakeTime{theTime: time.Now()}
}
func TestServerList(t *testing.T) {
eps := []string{
"endpoint:adfasdf@@who",
"endpoint:sdfgsdfg@@x/",
"endpoint:sdfgsdfg@@y",
"endpoint:dfgsfdg@@",
}
// Test adding entries.
ft := NewFakeTimeClock()
setServerListClock(ft)
sl := newServerList()
for i, ep := range eps {
bp := security.BlessingPattern(fmt.Sprintf("ep%d", i))
sl.add(ep, []security.BlessingPattern{bp}, time.Duration(5*i)*time.Second)
}
if sl.len() != len(eps) {
t.Fatalf("got %d, want %d", sl.len(), len(eps))
}
// Test timing out entries.
ft.advance(6 * time.Second)
if sl.removeExpired() != len(eps)-2 {
t.Fatalf("got %d, want %d", sl.len(), len(eps)-2)
}
// Test removing entries.
sl.remove(eps[2])
if sl.len() != len(eps)-3 {
t.Fatalf("got %d, want %d", sl.len(), len(eps)-3)
}
// Test copyToSlice.
if got, want := sl.copyToSlice(), []naming.VDLMountedServer{
{
Server: "endpoint:dfgsfdg@@",
TTL: 9,
BlessingPatterns: []string{"ep3"},
},
}; !reflect.DeepEqual(got, want) {
t.Errorf("Got %v, want %v", got, want)
}
}