Skip to content

Commit

Permalink
Implement TestFixture for metrics
Browse files Browse the repository at this point in the history
GitOrigin-RevId: c51ec0fb5dcc67f9e1b6b2564678fd86d3f3c416
  • Loading branch information
mmollaverdi authored and svc-squareup-copybara committed Aug 5, 2024
1 parent 5c2cb84 commit 97e0735
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 5 deletions.
1 change: 1 addition & 0 deletions misk-metrics/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ dependencies {
implementation(libs.kotlinStdLibJdk8)

testFixturesApi(project(":misk-inject"))
testFixturesApi(project(":misk-testing-api"))
testFixturesApi(libs.prometheusClient)
testFixturesImplementation(libs.guava)
testFixturesImplementation(libs.guice)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package misk.metrics.v2

import io.prometheus.client.Collector
import io.prometheus.client.CollectorRegistry
import io.prometheus.client.Predicate
import io.prometheus.client.SimpleCollector
import misk.inject.KAbstractModule
import misk.testing.TestFixture
import java.util.Enumeration

internal class CollectorRegistryModule : KAbstractModule() {

override fun configure() {
val registry = CollectorRegistryFixture(CollectorRegistry(true))
bind<CollectorRegistry>().toInstance(registry)
multibind<TestFixture>().toInstance(registry)
}
}

internal class CollectorRegistryFixture(val registry: CollectorRegistry) : CollectorRegistry(true), TestFixture {

private val registeredCollectors = mutableSetOf<Collector>()

override fun reset() {
registeredCollectors.forEach {
if (it is SimpleCollector<*>) {
it.clear()
}
}
}

override fun register(collector: Collector) {
registeredCollectors.add(collector)
registry.register(collector)
}

override fun unregister(collector: Collector) {
registeredCollectors.remove(collector)
registry.unregister(collector)
}

override fun metricFamilySamples(): Enumeration<Collector.MetricFamilySamples> {
return registry.metricFamilySamples()
}

override fun filteredMetricFamilySamples(includedNames: Set<String?>?): Enumeration<Collector.MetricFamilySamples> {
return registry.filteredMetricFamilySamples(includedNames)
}

override fun filteredMetricFamilySamples(sampleNameFilter: Predicate<String?>?): Enumeration<Collector.MetricFamilySamples> {
return registry.filteredMetricFamilySamples(sampleNameFilter)
}

override fun getSampleValue(name: String): Double? {
return registry.getSampleValue(name)
}

override fun getSampleValue(
name: String,
labelNames: Array<String?>?,
labelValues: Array<String?>?
): Double? {
return registry.getSampleValue(name, labelNames, labelValues)
}

override fun clear() {
registry.clear()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import misk.inject.KAbstractModule

class FakeMetricsModule : KAbstractModule() {
override fun configure() {
bind<CollectorRegistry>().toInstance(CollectorRegistry(true))
install(CollectorRegistryModule())
bind<Metrics>().to<FakeMetrics>()
}
}
2 changes: 2 additions & 0 deletions misk-testing/api/misk-testing.api
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
public final class misk/MiskTestingServiceModule : misk/inject/KAbstractModule {
public fun <init> ()V
public fun <init> (Z)V
public synthetic fun <init> (ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
}

public final class misk/cloud/fake/security/keys/FakeKeyManagementModule : misk/inject/KAbstractModule {
Expand Down
1 change: 1 addition & 0 deletions misk-testing/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ dependencies {
implementation(project(":misk-config"))
implementation(project(":misk-service"))
implementation(project(":misk-testing-api"))
implementation(testFixtures(project(":misk-metrics")))

testImplementation(libs.kotlinTest)
}
Expand Down
10 changes: 8 additions & 2 deletions misk-testing/src/main/kotlin/misk/MiskTestingServiceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package misk
import misk.concurrent.FakeSleeperModule
import misk.environment.FakeEnvVarModule
import misk.inject.KAbstractModule
import misk.metrics.FakeMetricsModule
import misk.random.FakeRandomModule
import misk.resources.TestingResourceLoaderModule
import misk.time.FakeClockModule
Expand All @@ -16,7 +17,9 @@ import misk.tokens.FakeTokenGeneratorModule
* set of fake bindings to replace real bindings that cannot exist in a unit testing environment
* (e.g system env vars and filesystem dependencies).
*/
class MiskTestingServiceModule : KAbstractModule() {
class MiskTestingServiceModule @JvmOverloads constructor(
private val installFakeMetrics: Boolean = false
): KAbstractModule() {
override fun configure() {
install(TestingResourceLoaderModule())
install(FakeEnvVarModule())
Expand All @@ -25,6 +28,9 @@ class MiskTestingServiceModule : KAbstractModule() {
install(FakeTickerModule())
install(FakeRandomModule())
install(FakeTokenGeneratorModule())
install(MiskCommonServiceModule())
if (installFakeMetrics) {
install(FakeMetricsModule())
}
install(MiskCommonServiceModule(installMetrics = !installFakeMetrics))
}
}
3 changes: 2 additions & 1 deletion misk/api/misk.api
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,8 @@ public abstract class misk/MiskCommand : java/lang/Runnable {
public final class misk/MiskCommonServiceModule : misk/inject/KAbstractModule {
public fun <init> ()V
public fun <init> (Lmisk/ServiceManagerConfig;)V
public synthetic fun <init> (Lmisk/ServiceManagerConfig;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lmisk/ServiceManagerConfig;Z)V
public synthetic fun <init> (Lmisk/ServiceManagerConfig;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
}

public final class misk/MiskRealServiceModule : misk/inject/KAbstractModule {
Expand Down
5 changes: 4 additions & 1 deletion misk/src/main/kotlin/misk/MiskServiceModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,17 @@ class MiskRealServiceModule @JvmOverloads constructor(
*/
class MiskCommonServiceModule @JvmOverloads constructor(
private val serviceManagerConfig: ServiceManagerConfig = ServiceManagerConfig(),
private val installMetrics: Boolean = true
) : KAbstractModule() {
override fun configure() {
binder().disableCircularProxies()
binder().requireExactBindingAnnotations()
install(MdcModule())
install(ExecutorsModule())
install(ServiceManagerModule(serviceManagerConfig))
install(PrometheusMetricsClientModule())
if (installMetrics) {
install(PrometheusMetricsClientModule())
}
install(MoshiModule(useWireToRead = true, useWireToWrite = true))
install(JvmManagementFactoryModule())
// Initialize empty sets for our multibindings.
Expand Down

0 comments on commit 97e0735

Please sign in to comment.