fleet/cmd/fleetctl/integrationtest/suite.go
Victor Lyuboslavsky 33396a5d91
Moved some integration tests into their own package. (#28978)
For #27927 

Refactoring to speed up fleetctl tests, no functional changes. Mostly
changing test files.

fleetctl is no longer the long pole in CI, the long pole is mysql,
followed by vuln.

<img width="389" alt="image"
src="https://github.com/user-attachments/assets/9ada64e2-b5e8-42e3-b120-4eb36183ae38"
/>
2025-05-09 09:26:57 -05:00

78 lines
1.9 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/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 = mysql.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
}