|
|
@@ -18,11 +18,13 @@ import (
|
|
|
"net/http"
|
|
|
"net/http/httptest"
|
|
|
"os"
|
|
|
+ "strings"
|
|
|
"testing"
|
|
|
"time"
|
|
|
|
|
|
"github.com/coreos/etcd/lease"
|
|
|
"github.com/coreos/etcd/mvcc/backend"
|
|
|
+
|
|
|
"golang.org/x/net/context"
|
|
|
)
|
|
|
|
|
|
@@ -38,7 +40,7 @@ func TestRenewHTTP(t *testing.T) {
|
|
|
t.Fatalf("failed to create lease: %v", err)
|
|
|
}
|
|
|
|
|
|
- ts := httptest.NewServer(NewHandler(le))
|
|
|
+ ts := httptest.NewServer(NewHandler(le, waitReady))
|
|
|
defer ts.Close()
|
|
|
|
|
|
ttl, err := RenewHTTP(context.TODO(), l.ID, ts.URL+LeasePrefix, http.DefaultTransport)
|
|
|
@@ -62,7 +64,7 @@ func TestTimeToLiveHTTP(t *testing.T) {
|
|
|
t.Fatalf("failed to create lease: %v", err)
|
|
|
}
|
|
|
|
|
|
- ts := httptest.NewServer(NewHandler(le))
|
|
|
+ ts := httptest.NewServer(NewHandler(le, waitReady))
|
|
|
defer ts.Close()
|
|
|
|
|
|
resp, err := TimeToLiveHTTP(context.TODO(), l.ID, true, ts.URL+LeaseInternalPrefix, http.DefaultTransport)
|
|
|
@@ -76,3 +78,50 @@ func TestTimeToLiveHTTP(t *testing.T) {
|
|
|
t.Fatalf("granted TTL expected 5, got %d", resp.LeaseTimeToLiveResponse.GrantedTTL)
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestRenewHTTPTimeout(t *testing.T) {
|
|
|
+ testApplyTimeout(t, func(l *lease.Lease, serverURL string) error {
|
|
|
+ _, err := RenewHTTP(context.TODO(), l.ID, serverURL+LeasePrefix, http.DefaultTransport)
|
|
|
+ return err
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+func TestTimeToLiveHTTPTimeout(t *testing.T) {
|
|
|
+ testApplyTimeout(t, func(l *lease.Lease, serverURL string) error {
|
|
|
+ _, err := TimeToLiveHTTP(context.TODO(), l.ID, true, serverURL+LeaseInternalPrefix, http.DefaultTransport)
|
|
|
+ return err
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+func testApplyTimeout(t *testing.T, f func(*lease.Lease, string) error) {
|
|
|
+ be, tmpPath := backend.NewTmpBackend(time.Hour, 10000)
|
|
|
+ defer os.Remove(tmpPath)
|
|
|
+ defer be.Close()
|
|
|
+
|
|
|
+ le := lease.NewLessor(be, int64(5))
|
|
|
+ le.Promote(time.Second)
|
|
|
+ l, err := le.Grant(1, int64(5))
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("failed to create lease: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ ts := httptest.NewServer(NewHandler(le, waitNotReady))
|
|
|
+ defer ts.Close()
|
|
|
+ err = f(l, ts.URL)
|
|
|
+ if err == nil {
|
|
|
+ t.Fatalf("expected timeout error, got nil")
|
|
|
+ }
|
|
|
+ if strings.Compare(err.Error(), ErrLeaseHTTPTimeout.Error()) != 0 {
|
|
|
+ t.Fatalf("expected (%v), got (%v)", ErrLeaseHTTPTimeout.Error(), err.Error())
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func waitReady() <-chan struct{} {
|
|
|
+ ch := make(chan struct{})
|
|
|
+ close(ch)
|
|
|
+ return ch
|
|
|
+}
|
|
|
+
|
|
|
+func waitNotReady() <-chan struct{} {
|
|
|
+ return nil
|
|
|
+}
|