package registry

import (
	"testing"

	. "github.com/smartystreets/goconvey/convey"
)

func TestIncrExp(t *testing.T) {
	Convey("test IncrExp", t, func() {
		re := new(Guard)
		re.incrExp()
		So(re.expPerMin, ShouldResemble, int64(2))
	})
}

func TestDecrExp(t *testing.T) {
	Convey("test DecrExp", t, func() {
		re := new(Guard)
		re.incrExp()
		re.decrExp()
		So(re.expPerMin, ShouldResemble, int64(0))
	})
}

func TestSetExp(t *testing.T) {
	Convey("test SetExp", t, func() {
		re := new(Guard)
		re.setExp(10)
		So(re.expPerMin, ShouldResemble, int64(20))
		So(re.expThreshold, ShouldResemble, int64(17))
	})
}

func TestUpdateFac(t *testing.T) {
	Convey("test UpdateFac", t, func() {
		re := new(Guard)
		re.incrFac()
		re.updateFac()
		So(re.facLastMin, ShouldResemble, int64(1))
	})
}

func TestIncrFac(t *testing.T) {
	Convey("test IncrFac", t, func() {
		re := new(Guard)
		re.incrFac()
		So(re.facInMin, ShouldResemble, int64(1))
	})
}

func TestIsProtected(t *testing.T) {
	Convey("test IncrFac", t, func() {
		re := new(Guard)
		re.incrExp()
		re.incrExp()
		re.incrFac()
		re.updateFac()
		So(re.ok(), ShouldBeTrue)
		re = new(Guard)
		re.incrExp()
		re.incrFac()
		re.updateFac()
		So(re.ok(), ShouldBeFalse)
	})
}
