Files
Lucas Manuel Rodriguez 057e1615b4 Move mysql/testing_utils.go to a separate mysql/mysqltest package (#45406)
Resolves #45220 (one of several PRs to achieve removing "testing"
package as dependency in production binary)

## Testing

- [x] QA'd all new/changed functionality manually.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Tests**
* Switched many tests to use a dedicated MySQL test helper package and
consolidated test-only utilities for datastore setup, cleanup, ad‑hoc
SQL, certificate generation, and activity/aggregation helpers.
* Added expanded test utilities for replication, DB connections and test
data seeding to improve integration-test reliability.

* **Chores**
  * No production behavior or user-facing APIs were changed.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45406)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-14 11:18:20 -03:00

89 lines
2.8 KiB
Go

package integrationtest
import (
"context"
"log/slog"
"net/http/httptest"
"testing"
"github.com/fleetdm/fleet/v4/server/config"
"github.com/fleetdm/fleet/v4/server/datastore/mysql"
"github.com/fleetdm/fleet/v4/server/datastore/mysql/mysqltest"
"github.com/fleetdm/fleet/v4/server/datastore/redis/redistest"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/platform/mysql/testing_utils"
"github.com/fleetdm/fleet/v4/server/service"
"github.com/fleetdm/fleet/v4/server/service/svctest"
"github.com/fleetdm/fleet/v4/server/test"
"github.com/stretchr/testify/require"
)
type BaseSuite struct {
Logger *slog.Logger
FleetCfg config.FleetConfig
Server *httptest.Server
DS *mysql.Datastore
Users map[string]fleet.User
Token string
cachedAdminToken string
}
func (s *BaseSuite) GetTestAdminToken(t *testing.T) string {
// because the login endpoint is rate-limited, use the cached admin token
// if available (if for some reason a test needs to logout the admin user,
// then set cachedAdminToken = "" so that a new token is retrieved).
if s.cachedAdminToken == "" {
s.cachedAdminToken = s.GetTestToken(t, service.TestAdminUserEmail, test.GoodPassword)
}
return s.cachedAdminToken
}
func (s *BaseSuite) GetTestToken(t *testing.T, email string, password string) string {
return svctest.GetToken(t, email, password, s.Server.URL)
}
func SetUpServerURL(t *testing.T, ds *mysql.Datastore, server *httptest.Server) {
appConf, err := ds.AppConfig(t.Context())
require.NoError(t, err)
appConf.ServerSettings.ServerURL = server.URL
err = ds.SaveAppConfig(t.Context(), appConf)
require.NoError(t, err)
}
func SetUpMySQLAndService(t *testing.T, uniqueTestName string, opts ...*service.TestServerOpts) (
*mysql.Datastore,
config.FleetConfig,
fleet.Service, context.Context,
) {
ds := mysqltest.CreateMySQLDSWithOptions(t, &testing_utils.DatastoreTestOptions{
UniqueTestName: uniqueTestName,
})
test.AddAllHostsLabel(t, ds)
// Set up the required fields on AppConfig
appConf, err := ds.AppConfig(testContext())
require.NoError(t, err)
appConf.OrgInfo.OrgName = "FleetTest"
appConf.ServerSettings.ServerURL = "https://example.org"
err = ds.SaveAppConfig(testContext(), appConf)
require.NoError(t, err)
fleetCfg := config.TestConfig()
fleetSvc, ctx := svctest.NewTestService(t, ds, fleetCfg, opts...)
return ds, fleetCfg, fleetSvc, ctx
}
func SetUpMySQLAndRedisAndService(t *testing.T, uniqueTestName string, opts ...*service.TestServerOpts) (*mysql.Datastore, fleet.RedisPool,
config.FleetConfig,
fleet.Service, context.Context,
) {
redisPool := redistest.SetupRedis(t, uniqueTestName, false, false, false)
ds, fleetCfg, fleetSvc, ctx := SetUpMySQLAndService(t, uniqueTestName, opts...)
return ds, redisPool, fleetCfg, fleetSvc, ctx
}
func testContext() context.Context {
return context.Background()
}