@@ -268,6 +268,71 @@ public void Cert()
268
268
}
269
269
}
270
270
271
+ [ OperatingSystemDependentFact ( Exclude = OperatingSystem . OSX | OperatingSystem . Windows ) ]
272
+ public void ExternalCertificate ( )
273
+ {
274
+ const string name = "testing_irrelevant" ;
275
+
276
+ var serverCertificateData = Convert . FromBase64String ( File . ReadAllText ( "assets/apiserver-pfx-data.txt" ) ) ;
277
+
278
+ var clientCertificateKeyData = Convert . FromBase64String ( File . ReadAllText ( "assets/client-key-data.txt" ) ) ;
279
+ var clientCertificateData = Convert . FromBase64String ( File . ReadAllText ( "assets/client-certificate-data.txt" ) ) ;
280
+
281
+ X509Certificate2 serverCertificate = null ;
282
+
283
+ if ( RuntimeInformation . IsOSPlatform ( OSPlatform . OSX ) )
284
+ {
285
+ using ( MemoryStream serverCertificateStream = new MemoryStream ( serverCertificateData ) )
286
+ {
287
+ serverCertificate = OpenCertificateStore ( serverCertificateStream ) ;
288
+ }
289
+ }
290
+ else
291
+ {
292
+ serverCertificate = new X509Certificate2 ( serverCertificateData , "" ) ;
293
+ }
294
+
295
+ var clientCertificate = new X509Certificate2 ( clientCertificateData , "" ) ;
296
+
297
+ var clientCertificateValidationCalled = false ;
298
+
299
+ using ( var server = new MockKubeApiServer ( testOutput , listenConfigure : options =>
300
+ {
301
+ options . UseHttps ( new HttpsConnectionAdapterOptions
302
+ {
303
+ ServerCertificate = serverCertificate ,
304
+ ClientCertificateMode = ClientCertificateMode . RequireCertificate ,
305
+ ClientCertificateValidation = ( certificate , chain , valid ) =>
306
+ {
307
+ clientCertificateValidationCalled = true ;
308
+ return clientCertificate . Equals ( certificate ) ;
309
+ } ,
310
+ } ) ;
311
+ } ) )
312
+ {
313
+ {
314
+ var clientCertificateText = Encoding . ASCII . GetString ( clientCertificateData ) . Replace ( "\n " , "\\ n" ) ;
315
+ var clientCertificateKeyText = Encoding . ASCII . GetString ( clientCertificateKeyData ) . Replace ( "\n " , "\\ n" ) ;
316
+ var responseJson = $ "{{\" apiVersion\" :\" testingversion\" ,\" status\" :{{\" clientCertificateData\" :\" { clientCertificateText } \" ,\" clientKeyData\" :\" { clientCertificateKeyText } \" }}}}";
317
+ var kubernetesConfig = GetK8SConfiguration ( server . Uri . ToString ( ) , responseJson , name ) ;
318
+ var clientConfig = KubernetesClientConfiguration . BuildConfigFromConfigObject ( kubernetesConfig , name ) ;
319
+ var client = new Kubernetes ( clientConfig ) ;
320
+ var listTask = ExecuteListPods ( client ) ;
321
+ Assert . True ( listTask . Response . IsSuccessStatusCode ) ;
322
+ Assert . Equal ( 1 , listTask . Body . Items . Count ) ;
323
+ }
324
+ {
325
+ var clientCertificateText = File . ReadAllText ( "assets/client.crt" ) . Replace ( "\n " , "\\ n" ) ;
326
+ var clientCertificateKeyText = File . ReadAllText ( "assets/client.key" ) . Replace ( "\n " , "\\ n" ) ;
327
+ var responseJson = $ "{{\" apiVersion\" :\" testingversion\" ,\" status\" :{{\" clientCertificateData\" :\" { clientCertificateText } \" ,\" clientKeyData\" :\" { clientCertificateKeyText } \" }}}}";
328
+ var kubernetesConfig = GetK8SConfiguration ( server . Uri . ToString ( ) , responseJson , name ) ;
329
+ var clientConfig = KubernetesClientConfiguration . BuildConfigFromConfigObject ( kubernetesConfig , name ) ;
330
+ var client = new Kubernetes ( clientConfig ) ;
331
+ Assert . ThrowsAny < Exception > ( ( ) => ExecuteListPods ( client ) ) ;
332
+ Assert . True ( clientCertificateValidationCalled ) ;
333
+ }
334
+ }
335
+ }
271
336
#endif // NETCOREAPP2_1
272
337
273
338
[ Fact ]
@@ -292,15 +357,18 @@ public void ExternalToken()
292
357
} ) )
293
358
{
294
359
{
295
- var kubernetesConfig = GetK8SConfiguration ( server . Uri . ToString ( ) , token , name ) ;
360
+
361
+ var responseJson = $ "{{\" apiVersion\" :\" testingversion\" ,\" status\" :{{\" token\" :\" { token } \" }}}}";
362
+ var kubernetesConfig = GetK8SConfiguration ( server . Uri . ToString ( ) , responseJson , name ) ;
296
363
var clientConfig = KubernetesClientConfiguration . BuildConfigFromConfigObject ( kubernetesConfig , name ) ;
297
364
var client = new Kubernetes ( clientConfig ) ;
298
365
var listTask = ExecuteListPods ( client ) ;
299
366
Assert . True ( listTask . Response . IsSuccessStatusCode ) ;
300
367
Assert . Equal ( 1 , listTask . Body . Items . Count ) ;
301
368
}
302
369
{
303
- var kubernetesConfig = GetK8SConfiguration ( server . Uri . ToString ( ) , "wrong token" , name ) ;
370
+ var responseJson = "{\" apiVersion\" :\" testingversion\" ,\" status\" :{\" token\" :\" wrong_token\" }}" ;
371
+ var kubernetesConfig = GetK8SConfiguration ( server . Uri . ToString ( ) , responseJson , name ) ;
304
372
var clientConfig = KubernetesClientConfiguration . BuildConfigFromConfigObject ( kubernetesConfig , name ) ;
305
373
var client = new Kubernetes ( clientConfig ) ;
306
374
var listTask = ExecuteListPods ( client ) ;
@@ -398,7 +466,7 @@ private X509Certificate2 OpenCertificateStore(Stream stream)
398
466
return certificate ;
399
467
}
400
468
401
- private K8SConfiguration GetK8SConfiguration ( string serverUri , string token , string name )
469
+ private K8SConfiguration GetK8SConfiguration ( string serverUri , string responseJson , string name )
402
470
{
403
471
const string username = "testinguser" ;
404
472
@@ -407,8 +475,6 @@ private K8SConfiguration GetK8SConfiguration(string serverUri, string token, str
407
475
new Context { Name = name , ContextDetails = new ContextDetails { Cluster = name , User = username } } ,
408
476
} ;
409
477
410
- var responseJson = $ "{{\" apiVersion\" : \" testingversion\" , \" status\" : {{\" token\" : \" { token } \" }}}}";
411
-
412
478
{
413
479
var clusters = new List < Cluster >
414
480
{
@@ -428,7 +494,7 @@ private K8SConfiguration GetK8SConfiguration(string serverUri, string token, str
428
494
var arguments = new string [ ] { } ;
429
495
if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) )
430
496
{
431
- arguments = ( $ "/c echo { responseJson } " ) . Split ( " " ) ;
497
+ arguments = new [ ] { "/c" , " echo" , responseJson } ;
432
498
}
433
499
434
500
if ( RuntimeInformation . IsOSPlatform ( OSPlatform . Linux ) )
0 commit comments