blob: d4b29c7177f21cb1120486533a7cf6638da4254a [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 util_test
import (
"errors"
"testing"
"time"
"v.io/v23/context"
"v.io/v23/verror"
"v.io/x/sensorlog/internal/util"
)
var (
errFoo = errors.New("errFoo")
errBar = errors.New("errBar")
)
func TestAsyncRun(t *testing.T) {
wait1 := util.AsyncRun(func() error {
time.Sleep(200 * time.Microsecond)
return nil
}, func(err error) {
t.Errorf("unexpected callback with error: %v", err)
})
var ecb2 error
wait2 := util.AsyncRun(func() error {
time.Sleep(100 * time.Microsecond)
return errFoo
}, func(err error) {
ecb2 = err
})
if wgot, want := wait1(), error(nil); wgot != want {
t.Errorf("wait1 unexpected error: got %v, want %v", wgot, want)
}
if wgot, cbgot, want := wait2(), ecb2, errFoo; wgot != want || cbgot != want {
t.Errorf("wait2 unexpected error: wait got %v, cb got %v, want %v", wgot, cbgot, want)
}
}
func TestAsyncRunNoCallback(t *testing.T) {
wait1 := util.AsyncRun(func() error {
time.Sleep(200 * time.Microsecond)
return nil
}, nil)
wait2 := util.AsyncRun(func() error {
time.Sleep(100 * time.Microsecond)
return errBar
}, nil)
if wgot, want := wait1(), error(nil); wgot != want {
t.Errorf("wait1 unexpected error: got %v, want %v", wgot, want)
}
if wgot, want := wait2(), errBar; wgot != want {
t.Errorf("wait2 unexpected error: got %v, want %v", wgot, want)
}
}
func TestAsyncRunIgnoreErrCancelled(t *testing.T) {
ctx, cancel := context.RootContext()
wait1 := util.AsyncRun(func() error {
<-ctx.Done()
return verror.New(verror.ErrCanceled, ctx)
}, func(err error) {
t.Errorf("unexpected callback with error: %v", err)
})
cancel()
if wgot, want := wait1(), error(nil); wgot != want {
t.Errorf("wait1 unexpected error: got %v, want %v", wgot, want)
}
}