@@ -13,6 +13,7 @@ import (
13
13
"fmt"
14
14
"io"
15
15
"net/http"
16
+ "net/http/httputil"
16
17
"strings"
17
18
"testing"
18
19
"text/template"
@@ -106,7 +107,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
106
107
// make sure we are changing something
107
108
require .NotEqualf (t , logger .DefaultLogLevel , policyLogLevel , "Policy log level %s should be different than agent default log level" , policyLogLevel )
108
109
// set policy log level and verify that eventually the agent sets it
109
- err = updatePolicyLogLevel (ctx , info .KibanaClient , policyResp .AgentPolicy , policyLogLevel .String ())
110
+ err = updatePolicyLogLevel (ctx , t , info .KibanaClient , policyResp .AgentPolicy , policyLogLevel .String ())
110
111
require .NoError (t , err , "error updating policy log level" )
111
112
112
113
// assert `elastic-agent inspect` eventually reports the new log level
@@ -123,7 +124,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
123
124
124
125
// assert Fleet eventually receives the new log level from agent through checkin
125
126
assert .Eventuallyf (t , func () bool {
126
- fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , info .KibanaClient , agentID )
127
+ fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , t , info .KibanaClient , agentID )
127
128
if err != nil {
128
129
t .Logf ("error getting log level for agent %q from Fleet metadata: %v" , agentID , err )
129
130
return false
@@ -138,7 +139,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
138
139
139
140
t .Logf ("Setting agent log level to %q" , agentLogLevel )
140
141
141
- err = updateAgentLogLevel (ctx , info .KibanaClient , agentID , agentLogLevel )
142
+ err = updateAgentLogLevel (ctx , t , info .KibanaClient , agentID , agentLogLevel )
142
143
require .NoError (t , err , "error updating agent log level" )
143
144
144
145
// TODO re-enable inspect assertion after https://github.com/elastic/elastic-agent/issues/4870 is solved
@@ -154,7 +155,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
154
155
155
156
// assert Fleet eventually receives the new log level from agent through checkin
156
157
assert .Eventuallyf (t , func () bool {
157
- fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , info .KibanaClient , agentID )
158
+ fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , t , info .KibanaClient , agentID )
158
159
if err != nil {
159
160
t .Logf ("error getting log level for agent %q from Fleet metadata: %v" , agentID , err )
160
161
return false
@@ -165,7 +166,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
165
166
166
167
// Step 3: Clear the agent-specific log level override, verify that we revert to policy log level
167
168
t .Logf ("Clearing agent log level, expecting log level to revert back to %q" , policyLogLevel )
168
- err = updateAgentLogLevel (ctx , info .KibanaClient , agentID , "" )
169
+ err = updateAgentLogLevel (ctx , t , info .KibanaClient , agentID , "" )
169
170
require .NoError (t , err , "error clearing agent log level" )
170
171
171
172
// assert `elastic-agent inspect` eventually reports the new log level
@@ -182,7 +183,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
182
183
183
184
// assert Fleet eventually receives the new log level from agent through checkin
184
185
assert .Eventuallyf (t , func () bool {
185
- fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , info .KibanaClient , agentID )
186
+ fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , t , info .KibanaClient , agentID )
186
187
if err != nil {
187
188
t .Logf ("error getting log level for agent %q from Fleet metadata: %v" , agentID , err )
188
189
return false
@@ -193,7 +194,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
193
194
194
195
// Step 4: Clear the log level in policy and verify that agent reverts to the initial log level
195
196
t .Logf ("Clearing policy log level, expecting log level to revert back to %q" , initialLogLevel )
196
- err = updatePolicyLogLevel (ctx , info .KibanaClient , policyResp .AgentPolicy , "" )
197
+ err = updatePolicyLogLevel (ctx , t , info .KibanaClient , policyResp .AgentPolicy , "" )
197
198
require .NoError (t , err , "error clearing policy log level" )
198
199
199
200
// assert `elastic-agent inspect` eventually reports the initial log level
@@ -210,7 +211,7 @@ func testLogLevelSetViaFleet(ctx context.Context, f *atesting.Fixture, agentID s
210
211
211
212
// assert Fleet eventually receives the new log level from agent through checkin
212
213
assert .Eventuallyf (t , func () bool {
213
- fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , info .KibanaClient , agentID )
214
+ fleetMetadataLogLevel , err := getLogLevelFromFleetMetadata (ctx , t , info .KibanaClient , agentID )
214
215
if err != nil {
215
216
t .Logf ("error getting log level for agent %q from Fleet metadata: %v" , agentID , err )
216
217
return false
@@ -238,7 +239,7 @@ func waitForAgentAndFleetHealthy(ctx context.Context, t *testing.T, f *atesting.
238
239
return status .State == int (cproto .State_HEALTHY ) && status .FleetState == int (cproto .State_HEALTHY )
239
240
}
240
241
241
- func updateAgentLogLevel (ctx context.Context , kibanaClient * kibana.Client , agentID string , logLevel string ) error {
242
+ func updateAgentLogLevel (ctx context.Context , t * testing. T , kibanaClient * kibana.Client , agentID string , logLevel string ) error {
242
243
updateLogLevelTemplateString := `{
243
244
"action": {
244
245
"type": "SETTINGS",
@@ -261,16 +262,22 @@ func updateAgentLogLevel(ctx context.Context, kibanaClient *kibana.Client, agent
261
262
}
262
263
263
264
err = updateLogLevelTemplate .Execute (buf , templateData )
264
-
265
- _ , err = kibanaClient .SendWithContext (ctx , http .MethodPost , "/api/fleet/agents/" + agentID + "/actions" , nil , nil , buf )
265
+ t . Logf ( "Updating agent-specific log level to %q" , logLevel )
266
+ fleetResp , err : = kibanaClient .SendWithContext (ctx , http .MethodPost , "/api/fleet/agents/" + agentID + "/actions" , nil , nil , buf )
266
267
if err != nil {
267
268
return fmt .Errorf ("error executing fleet request: %w" , err )
268
269
}
270
+ respDump , err := httputil .DumpResponse (fleetResp , true )
271
+ if err != nil {
272
+ t .Logf ("Error dumping Fleet response to updating agent-specific log level: %v" , err )
273
+ } else {
274
+ t .Logf ("Fleet response to updating agent-specific log level:\n ----- BEGIN RESPONSE DUMP -----\n %s\n ----- END RESPONSE DUMP -----\n " , string (respDump ))
275
+ }
269
276
270
277
return nil
271
278
}
272
279
273
- func updatePolicyLogLevel (ctx context.Context , kibanaClient * kibana.Client , policy kibana.AgentPolicy , newPolicyLogLevel string ) error {
280
+ func updatePolicyLogLevel (ctx context.Context , t * testing. T , kibanaClient * kibana.Client , policy kibana.AgentPolicy , newPolicyLogLevel string ) error {
274
281
// The request we would need is the one below, but at the time of writing there is no way to set overrides with fleet api definition in elastic-agent-libs, need to update
275
282
// info.KibanaClient.UpdatePolicy(ctx, policyResp.ID, kibana.AgentPolicyUpdateRequest{})
276
283
// Let's do a generic HTTP request
@@ -301,12 +308,19 @@ func updatePolicyLogLevel(ctx context.Context, kibanaClient *kibana.Client, poli
301
308
return fmt .Errorf ("error rendering policy update template: %w" , err )
302
309
}
303
310
304
- _ , err = kibanaClient .SendWithContext (ctx , http .MethodPut , "/api/fleet/agent_policies/" + policy .ID , nil , nil , buf )
311
+ fleetResp , err : = kibanaClient .SendWithContext (ctx , http .MethodPut , "/api/fleet/agent_policies/" + policy .ID , nil , nil , buf )
305
312
306
313
if err != nil {
307
314
return fmt .Errorf ("error executing fleet request: %w" , err )
308
315
}
309
316
317
+ respDump , err := httputil .DumpResponse (fleetResp , true )
318
+ if err != nil {
319
+ t .Logf ("Error dumping Fleet response to updating policy log level: %v" , err )
320
+ } else {
321
+ t .Logf ("Fleet response to updating policy log level:\n ----- BEGIN RESPONSE DUMP -----\n %s\n ----- END RESPONSE DUMP -----\n " , string (respDump ))
322
+ }
323
+
310
324
return nil
311
325
}
312
326
@@ -328,7 +342,7 @@ func getLogLevelFromInspectOutput(ctx context.Context, f *atesting.Fixture) (str
328
342
return agentInspectOutput .Agent .Logging .Level , nil
329
343
}
330
344
331
- func getLogLevelFromFleetMetadata (ctx context.Context , kibanaClient * kibana.Client , agentID string ) (string , error ) {
345
+ func getLogLevelFromFleetMetadata (ctx context.Context , t * testing. T , kibanaClient * kibana.Client , agentID string ) (string , error ) {
332
346
// The request we would need is kibanaClient.GetAgent(), but at the time of writing there is no way to get loglevel with fleet api definition in elastic-agent-libs, need to update
333
347
// kibana.AgentCommon struct to pick up log level from `local_metadata`
334
348
// Let's do a generic HTTP request
@@ -339,6 +353,14 @@ func getLogLevelFromFleetMetadata(ctx context.Context, kibanaClient *kibana.Clie
339
353
}
340
354
defer response .Body .Close ()
341
355
356
+ // The log below is a bit spammy but it can be useful for debugging
357
+ //dumpResponse, err := httputil.DumpResponse(response, true)
358
+ //if err != nil {
359
+ // t.Logf(" error dumping agent metadata fleet response: %v", err)
360
+ //} else {
361
+ // t.Logf("agent metadata fleet response:\n----- BEGIN RESPONSE DUMP -----\n%s\n----- END RESPONSE DUMP -----", dumpResponse)
362
+ //}
363
+
342
364
responseBodyBytes , err := io .ReadAll (response .Body )
343
365
if err != nil {
344
366
return "" , fmt .Errorf ("reading response body from Fleet: %w" , err )
@@ -360,16 +382,6 @@ func getLogLevelFromFleetMetadata(ctx context.Context, kibanaClient *kibana.Clie
360
382
return "" , fmt .Errorf ("loglevel from Fleet output is not a string: %T" , rawLogLevel )
361
383
}
362
384
363
- func unenrollAgentFunction (ctx context.Context , t * testing.T , client * kibana.Client , id string ) func () {
364
- return func () {
365
- _ , err := client .UnEnrollAgent (ctx , kibana.UnEnrollAgentRequest {
366
- ID : id ,
367
- Revoke : false ,
368
- })
369
- assert .NoError (t , err , "error unenrolling agent" )
370
- }
371
- }
372
-
373
385
func createPolicyAndEnrollmentToken (ctx context.Context , t * testing.T , kibClient * kibana.Client , policy kibana.AgentPolicy ) (kibana.PolicyResponse , kibana.CreateEnrollmentAPIKeyResponse ) {
374
386
t .Log ("Creating Agent policy..." )
375
387
policyResp , err := kibClient .CreatePolicy (ctx , policy )
0 commit comments