package storage

import (
	"reflect"

	"github.com/juju/errors"
	. "github.com/pingcap/check"
	"github.com/pingcap/schrodinger/pkg/types"
)

var _ = Suite(&managerSettingsSuite{})

type managerSettingsSuite struct {
	store *Storage
}

func (t *managerSettingsSuite) SetUpTest(c *C) {
	t.store = setupStore("managerSettings")
}

func (t *managerSettingsSuite) TearDownSuite(c *C) {
	t.store.Close()
}

func (t *managerSettingsSuite) TestSetAndGetManagerSettings(c *C) {
	if err := t.store.SetManagerSettings(insertManagerSettings); err != nil {
		c.Fatalf("set manager settings fails: %s", errors.ErrorStack(err))
	}

	got, exists := t.store.GetManagerSettings()
	c.Assert(exists, Equals, true)

	if !reflect.DeepEqual(insertManagerSettings, got) {
		c.Fatalf("expect %v, got %v", *insertManagerSettings, *got)
	}

	if err := t.store.SetManagerSettings(updateManagerSettings); err != nil {
		c.Fatalf("set manager settings fails: %s", errors.ErrorStack(err))
	}

	got, exists = t.store.GetManagerSettings()
	c.Assert(exists, Equals, true)
	if !reflect.DeepEqual(updateManagerSettings, got) {
		c.Fatalf("expect %v, got %v", *updateManagerSettings, *got)
	}
}

var insertManagerSettings = &types.ManagerSettings{
	GeneralRunningSizeLimit: 1,
	BenchRunningSizeLimit:   2,
}

var updateManagerSettings = &types.ManagerSettings{
	GeneralRunningSizeLimit: 3,
	BenchRunningSizeLimit:   4,
}
