22using System . Diagnostics ;
33using Microsoft . ApplicationInsights . Channel ;
44using Microsoft . ApplicationInsights . DataContracts ;
5+ using Microsoft . ApplicationInsights . Extensibility . Implementation ;
56using Microsoft . ApplicationInsights . Kubernetes . Debugging ;
67using Microsoft . ApplicationInsights . Kubernetes . Utilities ;
8+ using Microsoft . Extensions . DependencyInjection ;
9+ using Microsoft . Extensions . Options ;
710using Moq ;
811using Xunit ;
912
@@ -21,7 +24,8 @@ public void ConstructorSetsNullGetsNull()
2124 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
2225 null ,
2326 SDKVersionUtils . Instance ,
24- keyCacheMock . Object
27+ keyCacheMock . Object ,
28+ Options . Create ( new AppInsightsForKubernetesOptions ( ) )
2529 ) ;
2630 } ) ;
2731
@@ -40,7 +44,8 @@ public void ConstructorSetK8sEnvironment()
4044 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
4145 k8sEnvironmentHolderMock . Object ,
4246 SDKVersionUtils . Instance ,
43- keyCacheMock . Object ) ;
47+ keyCacheMock . Object ,
48+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
4449
4550 Assert . Equal ( k8sEnvironmentHolderMock . Object , target . K8SEnvironmentHolder ) ;
4651 Assert . Equal ( keyCacheMock . Object , target . TelemetryKeyCache ) ;
@@ -59,7 +64,8 @@ public void InitializeSetsRoleName()
5964
6065 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer ( k8sEnvironmentHolderMock . Object ,
6166 SDKVersionUtils . Instance ,
62- keyCacheMock . Object ) ;
67+ keyCacheMock . Object ,
68+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
6369 ITelemetry telemetry = new TraceTelemetry ( ) ;
6470 target . Initialize ( telemetry ) ;
6571
@@ -80,7 +86,8 @@ public void InitializeShouldNotOverwriteExistingRoleName()
8086 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
8187 k8sEnvironmentHolderMock . Object ,
8288 SDKVersionUtils . Instance ,
83- keyCacheMock . Object ) ;
89+ keyCacheMock . Object ,
90+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
8491
8592 ITelemetry telemetry = new TraceTelemetry ( ) ;
8693 telemetry . Context . Cloud . RoleName = "Existing RoleName" ;
@@ -122,7 +129,8 @@ public void InitializeWithEmptyForOptionalPropertyDoesNotLogError()
122129 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
123130 k8sEnvironmentHolderMock . Object ,
124131 SDKVersionUtils . Instance ,
125- keyCacheMock . Object ) ;
132+ keyCacheMock . Object ,
133+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
126134 ITelemetry telemetry = new TraceTelemetry ( ) ;
127135 target . Initialize ( telemetry ) ;
128136
@@ -162,7 +170,8 @@ public void InitializeWithEmptyForRequiredPropertyDoesLogError()
162170 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
163171 k8sEnvironmentHolderMock . Object ,
164172 SDKVersionUtils . Instance ,
165- keyCacheMock . Object ) ;
173+ keyCacheMock . Object ,
174+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
166175 ITelemetry telemetry = new TraceTelemetry ( ) ;
167176 target . Initialize ( telemetry ) ;
168177
@@ -198,7 +207,8 @@ public void InitializeSetsCustomDimensions()
198207 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
199208 k8sEnvironmentHolderMock . Object ,
200209 SDKVersionUtils . Instance ,
201- keyCacheMock . Object ) ;
210+ keyCacheMock . Object ,
211+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
202212 ITelemetry telemetry = new TraceTelemetry ( ) ;
203213 target . Initialize ( telemetry ) ;
204214
@@ -237,7 +247,8 @@ public void InitializeWillNotOverwriteExistingCustomDimension()
237247 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
238248 k8sEnvironmentHolderMock . Object ,
239249 SDKVersionUtils . Instance ,
240- keyCacheMock . Object ) ;
250+ keyCacheMock . Object ,
251+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
241252 ITelemetry telemetry = new TraceTelemetry ( ) ;
242253 ISupportProperties telemetryWithProperties = telemetry as ISupportProperties ;
243254 telemetryWithProperties . Properties [ "K8s.Container.ID" ] = "Existing Cid" ;
@@ -257,7 +268,8 @@ public void TimeoutGettingK8sEnvNoException()
257268 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
258269 k8sEnvironmentHolderMock . Object , // k8sEnvironmentHolderMock.Object.K8sEnvironment is null
259270 SDKVersionUtils . Instance ,
260- keyCacheMock . Object ) ;
271+ keyCacheMock . Object ,
272+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
261273
262274 ITelemetry telemetry = new TraceTelemetry ( ) ;
263275 ISupportProperties telemetryWithProperties = telemetry as ISupportProperties ;
@@ -284,7 +296,8 @@ public void ShouldUseTheValueByTheKeyProcessorForTelemetry()
284296 KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
285297 k8sEnvironmentHolderMock . Object ,
286298 SDKVersionUtils . Instance ,
287- keyCacheMock . Object ) ;
299+ keyCacheMock . Object ,
300+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
288301 ITelemetry telemetry = new TraceTelemetry ( ) ;
289302 target . Initialize ( telemetry ) ;
290303
@@ -293,4 +306,60 @@ public void ShouldUseTheValueByTheKeyProcessorForTelemetry()
293306 Assert . False ( telemetryWithProperties . Properties . ContainsKey ( "Kubernetes.Container.ID" ) ) ;
294307 Assert . True ( telemetryWithProperties . Properties . ContainsKey ( "Kubernetes_Container_ID" ) ) ;
295308 }
309+
310+ [ Fact ( DisplayName = "K8sTelemetryInitializer will not overwrite sdk version." ) ]
311+ public void ShouldNotOverwriteInternalSDK ( )
312+ {
313+ Mock < IK8sEnvironment > envMock = new ( ) ;
314+ Mock < IK8sEnvironmentHolder > k8sEnvironmentHolderMock = new ( ) ;
315+ Mock < ITelemetryKeyCache > keyCacheMock = new Mock < ITelemetryKeyCache > ( ) ;
316+
317+ envMock . Setup ( env => env . ContainerName ) . Returns ( "Hello.RoleName" ) ;
318+ envMock . Setup ( env => env . ContainerID ) . Returns ( "Hello.Cid" ) ;
319+
320+ keyCacheMock . Setup ( c => c . GetProcessedKey ( It . IsAny < string > ( ) ) ) . Returns < string > ( input => input . Replace ( '.' , '_' ) ) ;
321+ k8sEnvironmentHolderMock . Setup ( h => h . K8sEnvironment ) . Returns ( envMock . Object ) ;
322+
323+ // By default the SDK version should not be overwritten.
324+ KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
325+ k8sEnvironmentHolderMock . Object ,
326+ SDKVersionUtils . Instance ,
327+ keyCacheMock . Object ,
328+ Options . Create ( new AppInsightsForKubernetesOptions ( ) ) ) ;
329+ ITelemetry telemetry = new TraceTelemetry ( ) ;
330+
331+ string originalSdkVersion = telemetry . Context . GetInternalContext ( ) . SdkVersion ;
332+ target . Initialize ( telemetry ) ;
333+
334+ Assert . Equal ( originalSdkVersion , telemetry . Context . GetInternalContext ( ) . SdkVersion ) ;
335+ Assert . NotEqual ( SDKVersionUtils . Instance . CurrentSDKVersion , telemetry . Context . GetInternalContext ( ) . SdkVersion ) ;
336+ }
337+
338+ [ Fact ( DisplayName = "K8sTelemetryInitializer will overwrite sdk version by options." ) ]
339+ public void ShouldOverwriteInternalSDKByOptions ( )
340+ {
341+ Mock < IK8sEnvironment > envMock = new ( ) ;
342+ Mock < IK8sEnvironmentHolder > k8sEnvironmentHolderMock = new ( ) ;
343+ Mock < ITelemetryKeyCache > keyCacheMock = new Mock < ITelemetryKeyCache > ( ) ;
344+
345+ envMock . Setup ( env => env . ContainerName ) . Returns ( "Hello.RoleName" ) ;
346+ envMock . Setup ( env => env . ContainerID ) . Returns ( "Hello.Cid" ) ;
347+
348+ keyCacheMock . Setup ( c => c . GetProcessedKey ( It . IsAny < string > ( ) ) ) . Returns < string > ( input => input . Replace ( '.' , '_' ) ) ;
349+ k8sEnvironmentHolderMock . Setup ( h => h . K8sEnvironment ) . Returns ( envMock . Object ) ;
350+
351+ // By default the SDK version should not be overwritten.
352+ KubernetesTelemetryInitializer target = new KubernetesTelemetryInitializer (
353+ k8sEnvironmentHolderMock . Object ,
354+ SDKVersionUtils . Instance ,
355+ keyCacheMock . Object ,
356+ Options . Create ( new AppInsightsForKubernetesOptions ( ) { OverwriteSDKVersion = true } ) ) ;
357+ ITelemetry telemetry = new TraceTelemetry ( ) ;
358+
359+ string originalSdkVersion = telemetry . Context . GetInternalContext ( ) . SdkVersion ;
360+ target . Initialize ( telemetry ) ;
361+
362+ Assert . NotEqual ( originalSdkVersion , telemetry . Context . GetInternalContext ( ) . SdkVersion ) ;
363+ Assert . Equal ( SDKVersionUtils . Instance . CurrentSDKVersion , telemetry . Context . GetInternalContext ( ) . SdkVersion ) ;
364+ }
296365}
0 commit comments