@@ -36,6 +36,7 @@ type FleetTestSuite struct {
3636 ConfigID string // will be used to manage tokens
3737 CurrentToken string // current enrollment token
3838 CurrentTokenID string // current enrollment tokenID
39+ Hostname string // the hostname of the container
3940}
4041
4142func (fts * FleetTestSuite ) contributeSteps (s * godog.Suite ) {
@@ -64,8 +65,15 @@ func (fts *FleetTestSuite) anAgentIsDeployedToFleet() error {
6465 }
6566 fts .Cleanup = true
6667
68+ // get container hostname once
69+ hostname , err := getContainerHostname (containerName )
70+ if err != nil {
71+ return err
72+ }
73+ fts .Hostname = hostname
74+
6775 // enroll the agent with a new token
68- tokenJSONObject , err := createFleetToken ("name" , fts .ConfigID )
76+ tokenJSONObject , err := createFleetToken ("Test token for " + hostname , fts .ConfigID )
6977 if err != nil {
7078 return err
7179 }
@@ -132,23 +140,23 @@ func (fts *FleetTestSuite) setup() error {
132140func (fts * FleetTestSuite ) theAgentIsListedInFleetAsOnline () error {
133141 log .Debug ("Checking agent is listed in Fleet as online" )
134142
135- agentsCount := 0.0
136143 maxTimeout := 10 * time .Second
137144 retryCount := 1
138145
139146 exp := e2e .GetExponentialBackOff (maxTimeout )
140147
141- countAgentsFn := func () error {
142- count , err := countOnlineAgents ( )
143- if err != nil || count == 0 {
148+ agentOnlineFn := func () error {
149+ status , err := isAgentOnline ( fts . Hostname )
150+ if err != nil || ! status {
144151 if err == nil {
145152 err = fmt .Errorf ("The Agent is not online yet" )
146153 }
147154
148155 log .WithFields (log.Fields {
149- "retry" : retryCount ,
150- "onlineAgents" : count ,
151- "elapsedTime" : exp .GetElapsedTime (),
156+ "active" : status ,
157+ "elapsedTime" : exp .GetElapsedTime (),
158+ "hostname" : fts .Hostname ,
159+ "retry" : retryCount ,
152160 }).Warn (err .Error ())
153161
154162 retryCount ++
@@ -157,25 +165,19 @@ func (fts *FleetTestSuite) theAgentIsListedInFleetAsOnline() error {
157165 }
158166
159167 log .WithFields (log.Fields {
160- "elapsedTime" : exp .GetElapsedTime (),
161- "onlineAgents" : count ,
162- "retries" : retryCount ,
168+ "active" : status ,
169+ "elapsedTime" : exp .GetElapsedTime (),
170+ "hostname" : fts .Hostname ,
171+ "retries" : retryCount ,
163172 }).Info ("The Agent is online" )
164- agentsCount = count
165173 return nil
166174 }
167175
168- err := backoff .Retry (countAgentsFn , exp )
176+ err := backoff .Retry (agentOnlineFn , exp )
169177 if err != nil {
170178 return err
171179 }
172180
173- if agentsCount != 1 {
174- err = fmt .Errorf ("There are %.0f online agents. We expected to have exactly one" , agentsCount )
175- log .Error (err .Error ())
176- return err
177- }
178-
179181 return nil
180182}
181183
@@ -268,23 +270,23 @@ func (fts *FleetTestSuite) theAgentIsUnenrolled() error {
268270func (fts * FleetTestSuite ) theAgentIsNotListedAsOnlineInFleet () error {
269271 log .Debug ("Checking if the agent is not listed as online in Fleet" )
270272
271- agentsCount := 0.0
272273 maxTimeout := 10 * time .Second
273274 retryCount := 1
274275
275276 exp := e2e .GetExponentialBackOff (maxTimeout )
276277
277- countAgentsFn := func () error {
278- count , err := countOnlineAgents ( )
279- if err != nil || count != 0 {
278+ agentOnlineFn := func () error {
279+ status , err := isAgentOnline ( fts . Hostname )
280+ if err != nil || status {
280281 if err == nil {
281282 err = fmt .Errorf ("The Agent is still online" )
282283 }
283284
284285 log .WithFields (log.Fields {
285- "retry" : retryCount ,
286- "onlineAgents" : count ,
287- "elapsedTime" : exp .GetElapsedTime (),
286+ "active" : status ,
287+ "elapsedTime" : exp .GetElapsedTime (),
288+ "hostname" : fts .Hostname ,
289+ "retry" : retryCount ,
288290 }).Warn (err .Error ())
289291
290292 retryCount ++
@@ -293,25 +295,19 @@ func (fts *FleetTestSuite) theAgentIsNotListedAsOnlineInFleet() error {
293295 }
294296
295297 log .WithFields (log.Fields {
296- "elapsedTime" : exp .GetElapsedTime (),
297- "onlineAgents" : count ,
298- "retries" : retryCount ,
298+ "active" : status ,
299+ "elapsedTime" : exp .GetElapsedTime (),
300+ "hostname" : fts .Hostname ,
301+ "retries" : retryCount ,
299302 }).Info ("The Agent is offline" )
300- agentsCount = count
301303 return nil
302304 }
303305
304- err := backoff .Retry (countAgentsFn , exp )
306+ err := backoff .Retry (agentOnlineFn , exp )
305307 if err != nil {
306308 return err
307309 }
308310
309- if agentsCount != 0 {
310- err = fmt .Errorf ("There are %.0f online agents. We expected to have none" , agentsCount )
311- log .Error (err .Error ())
312- return err
313- }
314-
315311 return nil
316312}
317313
@@ -335,18 +331,8 @@ func (fts *FleetTestSuite) theEnrollmentTokenIsRevoked() error {
335331 "tokenID" : fts .CurrentTokenID ,
336332 }).Debug ("Revoking enrollment token" )
337333
338- revokeTokenURL := fleetEnrollmentTokenURL + "/" + fts .CurrentTokenID
339- deleteReq := createDefaultHTTPRequest (revokeTokenURL )
340-
341- body , err := curl .Delete (deleteReq )
334+ err := fts .removeToken ()
342335 if err != nil {
343- log .WithFields (log.Fields {
344- "token" : fts .CurrentToken ,
345- "tokenID" : fts .CurrentTokenID ,
346- "body" : body ,
347- "error" : err ,
348- "url" : revokeTokenURL ,
349- }).Error ("Could revoke token" )
350336 return err
351337 }
352338
@@ -390,6 +376,24 @@ func (fts *FleetTestSuite) anAttemptToEnrollANewAgentFails() error {
390376 return nil
391377}
392378
379+ func (fts * FleetTestSuite ) removeToken () error {
380+ revokeTokenURL := fleetEnrollmentTokenURL + "/" + fts .CurrentTokenID
381+ deleteReq := createDefaultHTTPRequest (revokeTokenURL )
382+
383+ body , err := curl .Delete (deleteReq )
384+ if err != nil {
385+ log .WithFields (log.Fields {
386+ "tokenID" : fts .CurrentTokenID ,
387+ "body" : body ,
388+ "error" : err ,
389+ "url" : revokeTokenURL ,
390+ }).Error ("Could delete token" )
391+ return err
392+ }
393+
394+ return nil
395+ }
396+
393397// checkFleetConfiguration checks that Fleet configuration is not missing
394398// any requirements and is read. To achieve it, a GET request is executed
395399func checkFleetConfiguration () error {
@@ -425,23 +429,6 @@ func checkFleetConfiguration() error {
425429 return nil
426430}
427431
428- // countOnlineAgents extracts the number of agents in the online status
429- // querying Fleet's agents endpoint
430- func countOnlineAgents () (float64 , error ) {
431- jsonResponse , err := getOnlineAgents ()
432- if err != nil {
433- return 0 , err
434- }
435-
436- agentsCount := jsonResponse .Path ("total" ).Data ().(float64 )
437-
438- log .WithFields (log.Fields {
439- "count" : agentsCount ,
440- }).Debug ("Online agents retrieved" )
441-
442- return agentsCount , nil
443- }
444-
445432// createFleetConfiguration sends a POST request to Fleet forcing the
446433// recreation of the configuration
447434func createFleetConfiguration () error {
@@ -713,9 +700,9 @@ func getOnlineAgents() (*gabs.Container, error) {
713700 r := createDefaultHTTPRequest (fleetAgentsURL )
714701 // let's not URL encode the querystring, as it seems Kibana is not handling
715702 // the request properly, returning an 400 Bad Request error with this message:
716- // [request query.page=1&perPage=20&showInactive=false ]: definition for this key is missing
703+ // [request query.page=1&perPage=20&showInactive=true ]: definition for this key is missing
717704 r .EncodeURL = false
718- r .QueryString = fmt .Sprintf ("page=1&perPage=20&showInactive=%t" , false )
705+ r .QueryString = fmt .Sprintf ("page=1&perPage=20&showInactive=%t" , true )
719706
720707 body , err := curl .Get (r )
721708 if err != nil {
@@ -738,3 +725,29 @@ func getOnlineAgents() (*gabs.Container, error) {
738725
739726 return jsonResponse , nil
740727}
728+
729+ // isAgentOnline extracts the status for an agent, identified by its hotname
730+ // It will wuery Fleet's agents endpoint
731+ func isAgentOnline (hostname string ) (bool , error ) {
732+ jsonResponse , err := getOnlineAgents ()
733+ if err != nil {
734+ return false , err
735+ }
736+
737+ agents := jsonResponse .Path ("list" )
738+
739+ for _ , agent := range agents .Children () {
740+ agentStatus := agent .Path ("active" ).Data ().(bool )
741+ agentHostname := agent .Path ("local_metadata.host.hostname" ).Data ().(string )
742+ if agentHostname == hostname {
743+ log .WithFields (log.Fields {
744+ "active" : agentStatus ,
745+ "hostname" : hostname ,
746+ }).Debug ("Agent status retrieved" )
747+
748+ return agentStatus , nil
749+ }
750+ }
751+
752+ return false , fmt .Errorf ("The agent '" + hostname + "' was not found in Fleet" )
753+ }
0 commit comments