From e4357bdfc1fd4711e6c22c95290ac3816ab86fd6 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Mon, 13 Jan 2025 22:32:24 -0800 Subject: [PATCH 1/3] fix test failure caused by NotAMock error --- .../resources/META-INF/aws.toolkit.core.xml | 3 +-- .../telemetry/MockTelemetryService.kt | 20 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml b/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml index 88b37350a68..e50c332de2f 100644 --- a/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml +++ b/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml @@ -26,8 +26,7 @@ serviceImplementation="software.aws.toolkits.jetbrains.core.credentials.DefaultCredentialManager" testServiceImplementation="software.aws.toolkits.jetbrains.core.credentials.MockCredentialsManager"/> + serviceImplementation="software.aws.toolkits.jetbrains.services.telemetry.DefaultTelemetryService"/> diff --git a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt index 851bbbf29b9..4d78f46a956 100644 --- a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt +++ b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt @@ -3,7 +3,8 @@ package software.aws.toolkits.jetbrains.services.telemetry -import com.intellij.openapi.components.service +import com.intellij.openapi.application.ApplicationManager +import com.intellij.testFramework.replaceService import org.junit.jupiter.api.extension.AfterEachCallback import org.junit.jupiter.api.extension.BeforeEachCallback import org.junit.jupiter.api.extension.ExtensionContext @@ -13,14 +14,11 @@ import org.mockito.kotlin.spy import software.amazon.awssdk.services.toolkittelemetry.model.Sentiment import software.aws.toolkits.core.telemetry.DefaultTelemetryBatcher import software.aws.toolkits.core.telemetry.MetricEvent +import software.aws.toolkits.core.telemetry.TelemetryBatcher import software.aws.toolkits.core.telemetry.TelemetryPublisher -class NoOpTelemetryService : TelemetryService(publisher, spy(DefaultTelemetryBatcher(publisher))) { +class NoOpTelemetryService(noOpPublisher: NoOpPublisher, batcher: TelemetryBatcher) : TelemetryService(noOpPublisher, batcher) { fun batcher() = super.batcher - - private companion object { - private val publisher: TelemetryPublisher by lazy { NoOpPublisher() } - } } class NoOpPublisher : TelemetryPublisher { @@ -32,8 +30,14 @@ class NoOpPublisher : TelemetryPublisher { } sealed class MockTelemetryServiceBase : ExternalResource() { - private val mockTelemetryService: NoOpTelemetryService - get() = service() as NoOpTelemetryService + private val publisher: NoOpPublisher by lazy { NoOpPublisher() } + private val batcher: TelemetryBatcher by lazy { spy(DefaultTelemetryBatcher(publisher)) } + + private val mockTelemetryService: NoOpTelemetryService by lazy { NoOpTelemetryService(publisher, batcher) } + + override fun before() { + ApplicationManager.getApplication().replaceService(TelemetryService::class.java, mockTelemetryService, mockTelemetryService) + } override fun after() { reset(batcher()) From 0c989ef3ca36df55f2a5989e744281013c89669e Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 16 Jan 2025 01:49:07 -0800 Subject: [PATCH 2/3] should keep test implementation of TelemetryService --- .../resources/META-INF/aws.toolkit.core.xml | 3 ++- .../services/telemetry/MockTelemetryService.kt | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml b/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml index e50c332de2f..88b37350a68 100644 --- a/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml +++ b/plugins/core/jetbrains-community/resources/META-INF/aws.toolkit.core.xml @@ -26,7 +26,8 @@ serviceImplementation="software.aws.toolkits.jetbrains.core.credentials.DefaultCredentialManager" testServiceImplementation="software.aws.toolkits.jetbrains.core.credentials.MockCredentialsManager"/> + serviceImplementation="software.aws.toolkits.jetbrains.services.telemetry.DefaultTelemetryService" + testServiceImplementation="software.aws.toolkits.jetbrains.services.telemetry.NoOpTelemetryService"/> diff --git a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt index 4d78f46a956..daec97bb0fb 100644 --- a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt +++ b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt @@ -17,8 +17,15 @@ import software.aws.toolkits.core.telemetry.MetricEvent import software.aws.toolkits.core.telemetry.TelemetryBatcher import software.aws.toolkits.core.telemetry.TelemetryPublisher -class NoOpTelemetryService(noOpPublisher: NoOpPublisher, batcher: TelemetryBatcher) : TelemetryService(noOpPublisher, batcher) { +class NoOpTelemetryService : TelemetryService { + constructor(noOpPublisher: NoOpPublisher, batcher: TelemetryBatcher) : super(noOpPublisher, batcher) + constructor() : this(NO_OP_PUBLISHER, DefaultTelemetryBatcher(NO_OP_PUBLISHER)) + fun batcher() = super.batcher + + companion object { + val NO_OP_PUBLISHER = NoOpPublisher() + } } class NoOpPublisher : TelemetryPublisher { @@ -30,7 +37,7 @@ class NoOpPublisher : TelemetryPublisher { } sealed class MockTelemetryServiceBase : ExternalResource() { - private val publisher: NoOpPublisher by lazy { NoOpPublisher() } + private val publisher: NoOpPublisher by lazy { NoOpTelemetryService.NO_OP_PUBLISHER } private val batcher: TelemetryBatcher by lazy { spy(DefaultTelemetryBatcher(publisher)) } private val mockTelemetryService: NoOpTelemetryService by lazy { NoOpTelemetryService(publisher, batcher) } From 2ba41bf0d276c5129baa8d5a76e5721a83533dfd Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 16 Jan 2025 02:20:55 -0800 Subject: [PATCH 3/3] should revert replaceService in after hook --- .../services/telemetry/MockTelemetryService.kt | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt index daec97bb0fb..24569c1be49 100644 --- a/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt +++ b/plugins/core/jetbrains-community/tstFixtures/software/aws/toolkits/jetbrains/services/telemetry/MockTelemetryService.kt @@ -3,7 +3,9 @@ package software.aws.toolkits.jetbrains.services.telemetry +import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.util.Disposer import com.intellij.testFramework.replaceService import org.junit.jupiter.api.extension.AfterEachCallback import org.junit.jupiter.api.extension.BeforeEachCallback @@ -37,17 +39,21 @@ class NoOpPublisher : TelemetryPublisher { } sealed class MockTelemetryServiceBase : ExternalResource() { - private val publisher: NoOpPublisher by lazy { NoOpTelemetryService.NO_OP_PUBLISHER } - private val batcher: TelemetryBatcher by lazy { spy(DefaultTelemetryBatcher(publisher)) } + protected val publisher: NoOpPublisher by lazy { NoOpTelemetryService.NO_OP_PUBLISHER } + protected val batcher: TelemetryBatcher by lazy { spy(DefaultTelemetryBatcher(publisher)) } + private lateinit var disposableParent: Disposable private val mockTelemetryService: NoOpTelemetryService by lazy { NoOpTelemetryService(publisher, batcher) } override fun before() { - ApplicationManager.getApplication().replaceService(TelemetryService::class.java, mockTelemetryService, mockTelemetryService) + // hack because @TestDisposable doesn't work here as it's not a test + disposableParent = Disposer.newDisposable() + ApplicationManager.getApplication().replaceService(TelemetryService::class.java, mockTelemetryService, disposableParent) } override fun after() { reset(batcher()) + Disposer.dispose(disposableParent) } fun telemetryService() = mockTelemetryService