package test

import (
	"math/rand"
	"sync"
	"testing"

	"github.com/pingcap/dbaas/billing2/db"
	"github.com/pingcap/dbaas/billing2/db/entity"
	"github.com/pingcap/dbaas/billing2/utils/tests"
	"github.com/stretchr/testify/suite"
)

type DBTestSuite struct {
	tests.BillingTestSuite
}

func TestDBTestSuite(t *testing.T) {
	suite.Run(t, new(DBTestSuite))
}

func (s *DBTestSuite) TestMaxConnections() {
	s.T().Skip("local db test, not ut")
	assert := s.Assert()
	targetRoutines := 100000
	wg := sync.WaitGroup{}
	for i := 0; i != targetRoutines; i++ {
		wg.Add(1)
		go func() {
			defer func() { wg.Done() }()
			actionEntity := &entity.AuditRecord{
				Action:   entity.AuditRecordActionReclaimCredit,
				TenantID: uint(rand.Uint64()),
				UserID:   uint(rand.Uint64()),
			}
			err := actionEntity.Create(db.GetDB())
			assert.NoError(err)
			var ent entity.AuditRecord
			err = entity.NewAuditRecordQuerySet(db.GetDB()).IDEq(actionEntity.ID).One(&ent)
			assert.NoError(err)
			err = entity.NewAuditRecordQuerySet(db.GetDB()).IDEq(actionEntity.ID).GetUpdater().SetAction(entity.AuditRecordActionChangeBindedDiscount).Update()
			assert.NoError(err)
		}()
	}
	wg.Wait()
}
