// Copyright 2020 The Go 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 fetch

import (
	"math"
	"testing"
)

func TestDecideToShed(t *testing.T) {
	// With a large maxSizeInFlight, we should never decide to shed no matter
	// the size.
	ls := loadShedder{maxSizeInFlight: math.MaxUint64}
	got, d := ls.shouldShed(1e10)
	if want := false; got != want {
		t.Fatalf("got %t, want %t", got, want)
	}
	d() // reset sizeInFlight
	ls.maxSizeInFlight = 10 * mib
	got, d = ls.shouldShed(3 * mib)
	if want := false; got != want {
		t.Fatalf("got %t, want %t", got, want)
	}
	bytesInFlight := func() int {
		return int(ls.stats().SizeInFlight)
	}

	if got, want := bytesInFlight(), 3*mib; got != want {
		t.Fatalf("got %d, want %d", got, want)
	}
	got, d2 := ls.shouldShed(8 * mib) // 8 + 3 > 10; shed
	d2()
	if want := true; got != want {
		t.Fatalf("got %t, want %t", got, want)
	}
	d() // should decrement zipSizeInFlight
	if got, want := bytesInFlight(), 0; got != want {
		t.Fatalf("got %d, want %d", got, want)
	}
	got, d = ls.shouldShed(8 * mib) // 8 < 10; do not shed
	if want := false; got != want {
		t.Fatalf("got %t, want %t", got, want)
	}
	d()
	if got, want := bytesInFlight(), 0; got != want {
		t.Fatalf("got %d, want %d", got, want)
	}
}
