@@ -25,42 +25,23 @@ import (
2525
2626 "github.com/google/uuid"
2727 "github.com/stretchr/testify/require"
28- "github.com/stretchr/testify/suite"
2928
3029 "github.com/gravitational/teleport/api/client"
3130 "github.com/gravitational/teleport/api/types"
32- "github.com/gravitational/teleport/integrations/lib"
3331 "github.com/gravitational/teleport/integrations/lib/logger"
3432 "github.com/gravitational/teleport/integrations/lib/testing/integration"
3533)
3634
37- type EventHandlerSuite struct {
38- suite.Suite
39- AuthHelper integration.AuthHelper
40- appConfig StartCmdConfig
41- fakeFluentd * FakeFluentd
42-
43- client * client.Client
44- teleportConfig lib.TeleportConfig
45- }
46-
4735func TestEventHandler (t * testing.T ) {
48- suite .Run (t , & EventHandlerSuite {
49- AuthHelper : & integration.MinimalAuthHelper {},
50- })
51- }
52-
53- // SetupSuite starts a Teleport auth service and creates the event forwarder
54- // user and role. This runs a once for the whole suite.
55- func (s * EventHandlerSuite ) SetupSuite () {
56- var err error
57- ctx , cancel := context .WithCancel (context .Background ())
58- s .T ().Cleanup (cancel )
36+ authHelper := & integration.MinimalAuthHelper {}
5937
38+ // starts a Teleport auth service and creates the event forwarder
39+ // user and role.
6040 // Start the Teleport Auth server and get the admin client.
61- s .client = s .AuthHelper .StartServer (s .T ())
62- _ , err = s .client .Ping (ctx )
63- require .NoError (s .T (), err )
41+ adminClient := authHelper .StartServer (t )
42+ t .Cleanup (func () { require .NoError (t , authHelper .Auth ().Close ()) })
43+ _ , err := adminClient .Ping (t .Context ())
44+ require .NoError (t , err )
6445
6546 eventHandlerRole , err := types .NewRole ("teleport-event-handler" , types.RoleSpecV6 {
6647 Allow : types.RoleConditions {
@@ -73,43 +54,38 @@ func (s *EventHandlerSuite) SetupSuite() {
7354 },
7455 Deny : types.RoleConditions {},
7556 })
76- require .NoError (s . T () , err )
57+ require .NoError (t , err )
7758
78- eventHandlerRole , err = s . client . CreateRole (ctx , eventHandlerRole )
79- require .NoError (s . T () , err )
59+ eventHandlerRole , err = adminClient . CreateRole (t . Context () , eventHandlerRole )
60+ require .NoError (t , err )
8061
8162 eventHandlerUser , err := types .NewUser ("teleport-event-handler" )
82- require .NoError (s . T () , err )
63+ require .NoError (t , err )
8364
8465 eventHandlerUser .SetRoles ([]string {eventHandlerRole .GetName ()})
85- eventHandlerUser , err = s .client .CreateUser (ctx , eventHandlerUser )
86- require .NoError (s .T (), err )
87-
88- s .teleportConfig .Addr = s .AuthHelper .ServerAddr ()
89- s .teleportConfig .Identity = s .AuthHelper .SignIdentityForUser (s .T (), ctx , eventHandlerUser )
90- }
91-
92- // SetupTest starts a fake fluentd server.
93- // This runs before every test from the suite.
94- func (s * EventHandlerSuite ) SetupTest () {
95- t := s .T ()
66+ eventHandlerUser , err = adminClient .CreateUser (t .Context (), eventHandlerUser )
67+ require .NoError (t , err )
9668
97- // Start fake fluentd
98- err : = logger .Setup (logger.Config {Severity : "debug" })
69+ // Starts a fake fluentd server.
70+ err = logger .Setup (logger.Config {Severity : "debug" })
9971 require .NoError (t , err )
10072
101- s . fakeFluentd = NewFakeFluentd (t )
102- s . fakeFluentd .Start ()
103- t .Cleanup (s . fakeFluentd .Close )
73+ fakeFluentd : = NewFakeFluentd (t )
74+ fakeFluentd .Start ()
75+ t .Cleanup (fakeFluentd .Close )
10476
10577 startTime := time .Now ().Add (- time .Minute )
10678
107- conf := StartCmdConfig {
79+ fluentdConfig := fakeFluentd .GetClientConfig ()
80+ fluentdConfig .FluentdURL = fakeFluentd .GetURL ()
81+ fluentdConfig .FluentdSessionURL = fluentdConfig .FluentdURL + "/session"
82+
83+ appConfig := StartCmdConfig {
10884 TeleportConfig : TeleportConfig {
109- TeleportAddr : s . teleportConfig . Addr ,
110- TeleportIdentityFile : s . teleportConfig . Identity ,
85+ TeleportAddr : authHelper . ServerAddr () ,
86+ TeleportIdentityFile : authHelper . SignIdentityForUser ( t , t . Context (), eventHandlerUser ) ,
11187 },
112- FluentdConfig : s . fakeFluentd . GetClientConfig () ,
88+ FluentdConfig : fluentdConfig ,
11389 IngestConfig : IngestConfig {
11490 StorageDir : t .TempDir (),
11591 Timeout : time .Second ,
@@ -121,88 +97,67 @@ func (s *EventHandlerSuite) SetupTest() {
12197 },
12298 }
12399
124- conf .FluentdURL = s .fakeFluentd .GetURL ()
125- conf .FluentdSessionURL = conf .FluentdURL + "/session"
126-
127- s .appConfig = conf
128- }
129-
130- func (s * EventHandlerSuite ) startApp () {
131- s .T ().Helper ()
132- t := s .T ()
133- t .Helper ()
134-
135- app , err := NewApp (& s .appConfig , slog .Default ())
136- require .NoError (t , err )
137-
138- integration .RunAndWaitReady (s .T (), app )
139- }
140-
141- // nonce is data produced to uniquely identify an event.
142- // The nonce is propagated from the event generator to the event checker.
143- // All events not matching the nonce are skipped.
144- type nonce any
145-
146- func (s * EventHandlerSuite ) TestEvent () {
147- ctx , cancel := context .WithCancel (context .Background ())
148- s .T ().Cleanup (cancel )
149-
100+ // Original TestEvent
150101 tests := []struct {
151102 name string
152- generateEvent func (* testing.T , * client.Client ) nonce
153- checkEvent func (* testing.T , string , nonce ) bool
103+ generateEvent func (* testing.T , * client.Client ) any
104+ checkEvent func (* testing.T , string , any ) bool
154105 }{
155106 {
156107 name : "new role" ,
157- generateEvent : func (t * testing.T , c * client.Client ) nonce {
108+ generateEvent : func (t * testing.T , c * client.Client ) any {
158109 roleName := uuid .New ().String ()
159110 role , err := types .NewRole (roleName , types.RoleSpecV6 {
160111 Options : types.RoleOptions {},
161112 Allow : types.RoleConditions {},
162113 Deny : types.RoleConditions {},
163114 })
164115 require .NoError (t , err )
165- role , err = c .CreateRole (ctx , role )
116+ role , err = c .CreateRole (t . Context () , role )
166117 require .NoError (t , err )
167118 return role .GetName ()
168119 },
169- checkEvent : func (t * testing.T , event string , n nonce ) bool {
120+ checkEvent : func (t * testing.T , event string , n any ) bool {
170121 roleName , ok := n .(string )
171122 require .True (t , ok )
172123 return strings .Contains (event , roleName )
173124 },
174125 },
175126 {
176127 name : "new token" ,
177- generateEvent : func (t * testing.T , c * client.Client ) nonce {
128+ generateEvent : func (t * testing.T , c * client.Client ) any {
178129 tokenName := uuid .New ().String ()
179130 token , err := types .NewProvisionToken (tokenName , types.SystemRoles {types .RoleNode }, time.Time {})
180131 require .NoError (t , err )
181- err = c .CreateToken (ctx , token )
132+ err = c .CreateToken (t . Context () , token )
182133 require .NoError (t , err )
183134 return nil
184135 },
185- checkEvent : func (t * testing.T , event string , _ nonce ) bool {
136+ checkEvent : func (t * testing.T , event string , _ any ) bool {
186137 return strings .Contains (event , "join_token.create" )
187138 },
188139 },
189140 }
190141
191142 // Start the event forwarder
192- s .startApp ()
143+ app , err := NewApp (& appConfig , slog .Default ())
144+ require .NoError (t , err )
145+
146+ t .Cleanup (app .Close )
147+
148+ integration .RunAndWaitReady (t , app )
193149
194150 for _ , tt := range tests {
195- s . T () .Run (tt .name , func (t * testing.T ) {
196- nonce := tt .generateEvent (t , s . client )
151+ t .Run (tt .name , func (t * testing.T ) {
152+ any := tt .generateEvent (t , adminClient )
197153
198- waitCtx , cancel := context .WithTimeout (ctx , 5 * time .Second )
199- s . T () .Cleanup (cancel )
154+ waitCtx , cancel := context .WithTimeout (t . Context () , 5 * time .Second )
155+ t .Cleanup (cancel )
200156
201- eventFound := false
202- for ! eventFound {
203- event , err := s .fakeFluentd .GetMessage (waitCtx )
204- require .NoError (s .T (), err , "did not receive the event after 5 seconds" )
205- if tt .checkEvent (t , event , nonce ) {
157+ for eventFound := false ; ! eventFound ; {
158+ event , err := fakeFluentd .GetMessage (waitCtx )
159+ require .NoError (t , err , "did not receive the event after 5 seconds" )
160+ if tt .checkEvent (t , event , any ) {
206161 t .Logf ("Event matched: %s" , event )
207162 eventFound = true
208163 } else {
0 commit comments