mirror of
https://github.com/empayre/fleet.git
synced 2024-11-06 17:05:18 +00:00
adf87140a7
- Add the server_url_prefix flag for configuring this functionality - Add prefix handling to the server routes - Refactor JS to use appropriate paths from modules - Use JS template to get URL prefix into JS environment - Update webpack config to support prefixing Thanks to securityonion.net for sponsoring the development of this feature. Closes #1661
125 lines
3.1 KiB
Go
125 lines
3.1 KiB
Go
package service
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"reflect"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
|
|
kitlog "github.com/go-kit/kit/log"
|
|
"github.com/kolide/fleet/server/config"
|
|
"github.com/kolide/fleet/server/datastore/inmem"
|
|
"github.com/kolide/fleet/server/kolide"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type testResource struct {
|
|
server *httptest.Server
|
|
adminToken string
|
|
userToken string
|
|
ds kolide.Datastore
|
|
}
|
|
|
|
type endpointService struct {
|
|
kolide.Service
|
|
}
|
|
|
|
func (svc endpointService) SendTestEmail(ctx context.Context, config *kolide.AppConfig) error {
|
|
return nil
|
|
}
|
|
func setupEndpointTest(t *testing.T) *testResource {
|
|
test := &testResource{}
|
|
|
|
var err error
|
|
test.ds, err = inmem.New(config.TestConfig())
|
|
require.Nil(t, err)
|
|
require.Nil(t, test.ds.MigrateData())
|
|
|
|
devOrgInfo := &kolide.AppConfig{
|
|
OrgName: "Kolide",
|
|
OrgLogoURL: "http://foo.bar/image.png",
|
|
SMTPPort: 465,
|
|
SMTPAuthenticationType: kolide.AuthTypeUserNamePassword,
|
|
SMTPEnableTLS: true,
|
|
SMTPVerifySSLCerts: true,
|
|
SMTPEnableStartTLS: true,
|
|
}
|
|
test.ds.NewAppConfig(devOrgInfo)
|
|
svc, _ := newTestService(test.ds, nil)
|
|
svc = endpointService{svc}
|
|
createTestUsers(t, test.ds)
|
|
logger := kitlog.NewLogfmtLogger(os.Stdout)
|
|
jwtKey := "CHANGEME"
|
|
|
|
routes := MakeHandler(svc, config.KolideConfig{Auth: config.AuthConfig{JwtKey: jwtKey}}, logger)
|
|
|
|
test.server = httptest.NewServer(routes)
|
|
|
|
userParam := loginRequest{
|
|
Username: "admin1",
|
|
Password: testUsers["admin1"].PlaintextPassword,
|
|
}
|
|
|
|
marshalledUser, _ := json.Marshal(&userParam)
|
|
|
|
requestBody := &nopCloser{bytes.NewBuffer(marshalledUser)}
|
|
resp, _ := http.Post(test.server.URL+"/api/v1/kolide/login", "application/json", requestBody)
|
|
|
|
var jsn = struct {
|
|
User *kolide.User `json:"user"`
|
|
Token string `json:"token"`
|
|
Err string `json:"error,omitempty"`
|
|
}{}
|
|
json.NewDecoder(resp.Body).Decode(&jsn)
|
|
test.adminToken = jsn.Token
|
|
|
|
// log in non admin user
|
|
userParam.Username = "user1"
|
|
userParam.Password = testUsers["user1"].PlaintextPassword
|
|
marshalledUser, _ = json.Marshal(userParam)
|
|
requestBody = &nopCloser{bytes.NewBuffer(marshalledUser)}
|
|
resp, err = http.Post(test.server.URL+"/api/v1/kolide/login", "application/json", requestBody)
|
|
require.Nil(t, err)
|
|
err = json.NewDecoder(resp.Body).Decode(&jsn)
|
|
require.Nil(t, err)
|
|
test.userToken = jsn.Token
|
|
|
|
return test
|
|
}
|
|
|
|
func functionName(f func(*testing.T, *testResource)) string {
|
|
fullName := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
|
|
elements := strings.Split(fullName, ".")
|
|
return elements[len(elements)-1]
|
|
}
|
|
|
|
var testFunctions = [...]func(*testing.T, *testResource){
|
|
testGetAppConfig,
|
|
testModifyAppConfig,
|
|
testModifyAppConfigWithValidationFail,
|
|
testGetOptions,
|
|
testModifyOptions,
|
|
testModifyOptionsValidationFail,
|
|
testOptionNotFound,
|
|
testAdminUserSetAdmin,
|
|
testNonAdminUserSetAdmin,
|
|
testAdminUserSetEnabled,
|
|
testNonAdminUserSetEnabled,
|
|
}
|
|
|
|
func TestEndpoints(t *testing.T) {
|
|
for _, f := range testFunctions {
|
|
r := setupEndpointTest(t)
|
|
defer r.server.Close()
|
|
t.Run(functionName(f), func(t *testing.T) {
|
|
f(t, r)
|
|
})
|
|
}
|
|
}
|