package spindle

import (
	"testing"
	"time"
)

func TestShutdownEndsAPushFetchInFlight(t *testing.T) {
	e := newPushEnv(t)
	push := e.firstPush(t)
	release := e.w.holdGit()
	defer release(false)

	answered := make(chan error, 1)
	go func() {
		_, err := e.notify(e.n.s, push)
		answered <- err
	}()
	e.waitClone(t)

	e.n.s.rootCancel()
	select {
	case err := <-answered:
		if err == nil {
			t.Fatal("the push was handled although its fetch was still held")
		}
	case <-time.After(5 * time.Second):
		t.Fatal("the push's fetch kept running after the spindle was shut down")
	}
}
