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

80 lines
2.0 KiB
Go

package integrationtest
import (
"bytes"
"context"
"encoding/json"
"io"
"net/http"
"net/http/httptest"
"github.com/fleetdm/fleet/v4/server/datastore/mysql"
"github.com/fleetdm/fleet/v4/server/datastore/mysql/mysqltest"
"github.com/fleetdm/fleet/v4/server/fleet"
"github.com/fleetdm/fleet/v4/server/test"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
)
type WithDS struct {
Suite *suite.Suite
DS *mysql.Datastore
}
func (ts *WithDS) SetupSuite(dbName string) {
t := ts.Suite.T()
ts.DS = mysqltest.CreateNamedMySQLDS(t, dbName)
test.AddAllHostsLabel(t, ts.DS)
// Set up the required fields on AppConfig
appConf, err := ts.DS.AppConfig(context.Background())
require.NoError(t, err)
appConf.OrgInfo.OrgName = "FleetTest"
appConf.ServerSettings.ServerURL = "https://example.org"
err = ts.DS.SaveAppConfig(context.Background(), appConf)
require.NoError(t, err)
}
func (ts *WithDS) TearDownSuite() {
_ = ts.DS.Close()
}
type WithServer struct {
WithDS
Server *httptest.Server
Users map[string]fleet.User
}
type loginRequest struct {
Email string `json:"email"`
Password string `json:"password"`
}
func (ts *WithServer) GetTestToken(email string, password string) string {
params := loginRequest{
Email: email,
Password: password,
}
j, err := json.Marshal(&params)
require.NoError(ts.Suite.T(), err)
requestBody := io.NopCloser(bytes.NewBuffer(j))
resp, err := http.Post(ts.Server.URL+"/api/latest/fleet/login", "application/json", requestBody)
require.NoError(ts.Suite.T(), err)
defer func() { _ = resp.Body.Close() }()
assert.Equal(ts.Suite.T(), http.StatusOK, resp.StatusCode)
jsn := struct {
User *fleet.User `json:"user"`
Token string `json:"token"`
Err []map[string]string `json:"errors,omitempty"`
}{}
err = json.NewDecoder(resp.Body).Decode(&jsn)
require.NoError(ts.Suite.T(), err)
require.Len(ts.Suite.T(), jsn.Err, 0)
return jsn.Token
}