Skip to content

Commit da1b99d

Browse files
Expand E2E test suite (#2645)
* Expand E2E test suite Add tests to the stand alone and fleet-server in an agent container test suite that use autogenerated client code in order to test most API endpoints (only the artifacts endpoint is missing). Add a test to the container suite that enrolls another elastic-agent container instance into fleet and verifies its status. * Fix unit tests * Fix typo * Add basic artifacts test * Verify artifact body * Fix comments
1 parent 856a8e5 commit da1b99d

19 files changed

+3580
-17
lines changed

dev-tools/e2e/certs.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ openssl req -new \
3838
-key ${CERT_DIR}/fleet-server.key \
3939
-passin file:${CERT_DIR}/passphrase \
4040
-subj "/CN=localhost" \
41-
-addext "subjectAltName=IP:127.0.0.1,DNS:localhost" \
41+
-addext "subjectAltName=IP:127.0.0.1,DNS:localhost,DNS:fleet-server" \
4242
-out ${CERT_DIR}/fleet-server.csr \
4343
2>/dev/null
4444

4545
# Sign CSR with CA
4646
openssl x509 -req \
4747
-in ${CERT_DIR}/fleet-server.csr \
4848
-days 356 \
49-
-extfile <(printf "subjectAltName=IP:127.0.0.1,DNS:localhost") \
49+
-extfile <(printf "subjectAltName=IP:127.0.0.1,DNS:localhost,DNS:fleet-server") \
5050
-CA ${CERT_DIR}/e2e-test-ca.crt \
5151
-CAkey ${CERT_DIR}/e2e-test-ca.key \
5252
-CAcreateserial \

dev-tools/e2e/kibana.yml

+12-1
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,26 @@ server.ssl.enabled: false
44
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
55
elasticsearch.serviceAccountToken: "${KIBANA_TOKEN}"
66

7+
xpack.securitySolution.packagerTaskInterval: 1s
78
xpack.fleet.agents.enabled: true
8-
xpack.fleet.agents.fleet_server.hosts: ["http://fleet-server:8220"]
9+
xpack.fleet.agents.fleet_server.hosts: ["https://fleet-server:8220"]
910
xpack.fleet.agents.elasticsearch.hosts: ["http://elasticsearch:9200"]
1011
xpack.fleet.packages:
1112
- name: elastic_agent
1213
version: latest
1314
- name: fleet_server
1415
version: latest
1516
xpack.fleet.agentPolicies:
17+
- name: dummy-policy
18+
id: dummy-policy
19+
namespace: default
20+
monitoring_enabled: []
21+
package_policies: []
22+
- name: security-policy
23+
id: security-policy
24+
namespace: default
25+
monitoring_enabled: []
26+
package_policies: []
1627
- name: fleet-server-policy
1728
id: fleet-server-policy
1829
monitoring_enabled: []

internal/pkg/api/api.go

+8
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ var _ ServerInterface = (*apiServer)(nil)
3434

3535
func (a *apiServer) AgentEnroll(w http.ResponseWriter, r *http.Request, params AgentEnrollParams) {
3636
zlog := hlog.FromRequest(r).With().Str("mod", kEnrollMod).Logger()
37+
w.Header().Set("Content-Type", "application/json")
3738

3839
// Error in the scope for deferred rolback function check
3940
var err error
@@ -60,6 +61,7 @@ func (a *apiServer) AgentEnroll(w http.ResponseWriter, r *http.Request, params A
6061

6162
func (a *apiServer) AgentAcks(w http.ResponseWriter, r *http.Request, id string, params AgentAcksParams) {
6263
zlog := hlog.FromRequest(r).With().Str(LogAgentID, id).Logger()
64+
w.Header().Set("Content-Type", "application/json")
6365
if err := a.ack.handleAcks(zlog, w, r, id); err != nil {
6466
cntAcks.IncError(err)
6567
ErrorResp(w, r, err)
@@ -68,6 +70,7 @@ func (a *apiServer) AgentAcks(w http.ResponseWriter, r *http.Request, id string,
6870

6971
func (a *apiServer) AgentCheckin(w http.ResponseWriter, r *http.Request, id string, params AgentCheckinParams) {
7072
zlog := hlog.FromRequest(r).With().Str(LogAgentID, id).Logger()
73+
w.Header().Set("Content-Type", "application/json")
7174
err := a.ct.handleCheckin(zlog, w, r, id, params.UserAgent)
7275
if err != nil {
7376
cntCheckin.IncError(err)
@@ -84,13 +87,15 @@ func (a *apiServer) Artifact(w http.ResponseWriter, r *http.Request, id string,
8487

8588
err := a.at.handleArtifacts(zlog, w, r, id, sha2)
8689
if err != nil {
90+
w.Header().Set("Content-Type", "application/json")
8791
cntArtifacts.IncError(err)
8892
ErrorResp(w, r, err)
8993
}
9094
}
9195

9296
func (a *apiServer) UploadBegin(w http.ResponseWriter, r *http.Request, params UploadBeginParams) {
9397
zlog := hlog.FromRequest(r).With().Logger()
98+
w.Header().Set("Content-Type", "application/json")
9499
err := a.ut.handleUploadBegin(zlog, w, r)
95100
if err != nil {
96101
cntUploadStart.IncError(err)
@@ -100,6 +105,7 @@ func (a *apiServer) UploadBegin(w http.ResponseWriter, r *http.Request, params U
100105

101106
func (a *apiServer) UploadComplete(w http.ResponseWriter, r *http.Request, id string, params UploadCompleteParams) {
102107
zlog := hlog.FromRequest(r).With().Str(LogAgentID, id).Logger()
108+
w.Header().Set("Content-Type", "application/json")
103109
err := a.ut.handleUploadComplete(zlog, w, r, id)
104110
if err != nil {
105111
cntUploadEnd.IncError(err)
@@ -109,6 +115,7 @@ func (a *apiServer) UploadComplete(w http.ResponseWriter, r *http.Request, id st
109115

110116
func (a *apiServer) UploadChunk(w http.ResponseWriter, r *http.Request, id string, chunkNum int, params UploadChunkParams) {
111117
zlog := hlog.FromRequest(r).With().Str(LogAgentID, id).Logger()
118+
w.Header().Set("Content-Type", "application/json")
112119

113120
if _, err := a.ut.authAPIKey(r, a.bulker, a.ut.cache); err != nil {
114121
cntUploadChunk.IncError(err)
@@ -125,6 +132,7 @@ func (a *apiServer) Status(w http.ResponseWriter, r *http.Request, params Status
125132
zlog := hlog.FromRequest(r).With().
126133
Str("mod", kStatusMod).
127134
Logger()
135+
w.Header().Set("Content-Type", "application/json")
128136
err := a.st.handleStatus(zlog, a.sm, a.bi, r, w)
129137
if err != nil {
130138
cntStatus.IncError(err)

internal/pkg/api/handleStatus.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (st StatusT) handleStatus(zlog zerolog.Logger, sm policy.SelfMonitor, bi bu
6868
}
6969

7070
state := sm.State()
71-
resp := StatusResponse{
71+
resp := StatusAPIResponse{
7272
Name: build.ServiceName,
7373
Status: StatusResponseStatus(state.String()), // TODO try to make the oapi codegen less verbose here
7474
}

internal/pkg/api/handleStatus_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ func TestHandleStatus(t *testing.T) {
108108

109109
assert.Equal(t, expectedCode, w.Code)
110110

111-
var res StatusResponse
111+
var res StatusAPIResponse
112112
err := json.Unmarshal(w.Body.Bytes(), &res)
113113
require.NoError(t, err)
114114

internal/pkg/api/handleUpload.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (ut *UploadT) handleUploadBegin(_ zerolog.Logger, w http.ResponseWriter, r
9595
}
9696

9797
// prepare and write response
98-
resp := UploadBeginResponse{
98+
resp := UploadBeginAPIResponse{
9999
ChunkSize: info.ChunkSize,
100100
UploadId: info.ID,
101101
}

internal/pkg/api/handleUpload_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -283,13 +283,12 @@ func TestUploadBeginResponse(t *testing.T) {
283283
hr.ServeHTTP(rec, req)
284284
assert.Equal(t, http.StatusOK, rec.Code)
285285

286-
var response UploadBeginResponse
286+
var response UploadBeginAPIResponse
287287
err := json.Unmarshal(rec.Body.Bytes(), &response)
288288
assert.NoErrorf(t, err, "upload start should provide valid JSON response")
289289

290290
assert.NotEmptyf(t, response.UploadId, "upload start response should provide an ID")
291291
assert.Greaterf(t, response.ChunkSize, int64(0), "upload start response should provide a chunk size > 0")
292-
293292
}
294293

295294
/*

internal/pkg/api/openapi.gen.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

main.go

+4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44

55
//go:generate schema-generate -esdoc -s -cm "{\"Api\": \"API\", \"Id\": \"ID\"}" -o internal/pkg/model/schema.go -p model model/schema.json
66
//go:generate oapi-codegen --config model/oapi-cfg.yml model/openapi.yml
7+
//go:generate oapi-codegen -generate types -package api -o pkg/api/types.gen.go model/openapi.yml
8+
//go:generate oapi-codegen -generate client -package api -o pkg/api/client.gen.go model/openapi.yml
79
//go:generate go fmt internal/pkg/model/schema.go
810
//go:generate go fmt internal/pkg/api/openapi.gen.go
11+
//go:generate go fmt pkg/api/types.gen.go
12+
//go:generate go fmt pkg/api/client.gen.go
913

1014
package main
1115

model/openapi.yml

+2
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ components:
5858
description: The date-time that the fleet-server binary was created.
5959
#format: date-time # not using date-time format at the moment because the currently available objects have plain strings
6060
statusResponse:
61+
x-go-name: StatusAPIResponse
6162
description: Status response information.
6263
type: object
6364
required:
@@ -643,6 +644,7 @@ components:
643644
- endpoint
644645
- agent
645646
uploadBeginResponse:
647+
x-go-name: UploadBeginAPIResponse
646648
description: Response to initiating a file upload
647649
type: object
648650
required:

0 commit comments

Comments
 (0)