@@ -78,6 +78,7 @@ func TestCSRApprove(t *testing.T) {
7878
7979 csrResult , err := client .CertificatesV1 ().CertificateSigningRequests ().Get (ctx , csrName , metav1.GetOptions {})
8080 r .NoError (err )
81+ r .GreaterOrEqual (len (csrResult .Status .Conditions ), 1 )
8182
8283 r .Equal (csrResult .Status .Conditions [0 ].Type , certv1 .CertificateApproved )
8384 })
@@ -115,6 +116,112 @@ func TestCSRApprove(t *testing.T) {
115116 r .NoError (err )
116117 r .Len (csrResult .Status .Conditions , 0 )
117118 })
119+
120+ t .Run ("approves for kubelet-bootstrap user" , func (t * testing.T ) {
121+ r := require .New (t )
122+ t .Parallel ()
123+
124+ csrName := "node-csr-123"
125+ userName := "kubelet-bootstrap"
126+ client := fake .NewClientset (getCSRv1 (csrName , userName ))
127+ s := NewApprovalManager (log , client )
128+ watcher := watch .NewFake ()
129+ client .PrependWatchReactor ("certificatesigningrequests" , ktest .DefaultWatchReactor (watcher , nil ))
130+
131+ ctx := context .Background ()
132+ var wg sync.WaitGroup
133+ wg .Add (2 )
134+ go func () {
135+ defer wg .Done ()
136+ if err := s .Start (ctx ); err != nil {
137+ t .Logf ("failed to start approval manager: %s" , err .Error ())
138+ }
139+ }()
140+ go func () {
141+ defer wg .Done ()
142+ watcher .Add (getCSRv1 (csrName , userName ))
143+ time .Sleep (100 * time .Millisecond )
144+ s .Stop ()
145+ }()
146+
147+ wg .Wait ()
148+
149+ csrResult , err := client .CertificatesV1 ().CertificateSigningRequests ().Get (ctx , csrName , metav1.GetOptions {})
150+ r .NoError (err )
151+ r .GreaterOrEqual (len (csrResult .Status .Conditions ), 1 )
152+
153+ r .Equal (csrResult .Status .Conditions [0 ].Type , certv1 .CertificateApproved )
154+ })
155+
156+ t .Run ("approves for kubelet-nodepool-bootstrap user" , func (t * testing.T ) {
157+ r := require .New (t )
158+ t .Parallel ()
159+
160+ csrName := "node-csr-123"
161+ userName := "kubelet-nodepool-bootstrap"
162+ client := fake .NewClientset (getCSRv1 (csrName , userName ))
163+ s := NewApprovalManager (log , client )
164+ watcher := watch .NewFake ()
165+ client .PrependWatchReactor ("certificatesigningrequests" , ktest .DefaultWatchReactor (watcher , nil ))
166+
167+ ctx := context .Background ()
168+ var wg sync.WaitGroup
169+ wg .Add (2 )
170+ go func () {
171+ defer wg .Done ()
172+ if err := s .Start (ctx ); err != nil {
173+ t .Logf ("failed to start approval manager: %s" , err .Error ())
174+ }
175+ }()
176+ go func () {
177+ defer wg .Done ()
178+ watcher .Add (getCSRv1 (csrName , userName ))
179+ time .Sleep (100 * time .Millisecond )
180+ s .Stop ()
181+ }()
182+
183+ wg .Wait ()
184+
185+ csrResult , err := client .CertificatesV1 ().CertificateSigningRequests ().Get (ctx , csrName , metav1.GetOptions {})
186+ r .NoError (err )
187+ r .GreaterOrEqual (len (csrResult .Status .Conditions ), 1 )
188+
189+ r .Equal (csrResult .Status .Conditions [0 ].Type , certv1 .CertificateApproved )
190+ })
191+
192+ t .Run ("skips for unknown user" , func (t * testing.T ) {
193+ r := require .New (t )
194+ t .Parallel ()
195+
196+ csrName := "node-csr-123"
197+ userName := "some-unknown-user"
198+ client := fake .NewClientset (getCSRv1 (csrName , userName ))
199+ s := NewApprovalManager (log , client )
200+ watcher := watch .NewFake ()
201+ client .PrependWatchReactor ("certificatesigningrequests" , ktest .DefaultWatchReactor (watcher , nil ))
202+
203+ ctx := context .Background ()
204+ var wg sync.WaitGroup
205+ wg .Add (2 )
206+ go func () {
207+ defer wg .Done ()
208+ if err := s .Start (ctx ); err != nil {
209+ t .Logf ("failed to start approval manager: %s" , err .Error ())
210+ }
211+ }()
212+ go func () {
213+ defer wg .Done ()
214+ watcher .Add (getCSRv1 (csrName , userName ))
215+ time .Sleep (100 * time .Millisecond )
216+ s .Stop ()
217+ }()
218+
219+ wg .Wait ()
220+
221+ csrResult , err := client .CertificatesV1 ().CertificateSigningRequests ().Get (ctx , csrName , metav1.GetOptions {})
222+ r .NoError (err )
223+ r .Len (csrResult .Status .Conditions , 0 )
224+ })
118225}
119226
120227func TestApproveCSRExponentialBackoff (t * testing.T ) {
0 commit comments