package de.otto.edison.cache.controller;
import com.github.benmanes.caffeine.cache.Caffeine;
import de.otto.edison.cache.configuration.CaffeineCacheConfig;
import org.junit.Test;
import org.springframework.boot.actuate.endpoint.CachePublicMetrics;
import org.springframework.boot.actuate.metrics.Metric;
import org.springframework.cache.caffeine.CaffeineCache;
import java.util.Collections;
import java.util.Map;
import static com.github.benmanes.caffeine.cache.Caffeine.from;
import static java.util.Arrays.asList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class CacheInfoControllerTest {
@Test
public void shouldHaveCacheName() {
// given:
final CachePublicMetrics metrics = mock(CachePublicMetrics.class);
when(metrics.metrics()).thenReturn(asList(new Metric<Number>("cache.test.foo", 42L)));
// and:
final CacheInfoController controller = new CacheInfoController();
controller.cacheMetrics = metrics;
controller.cacheConfigs = Collections.emptyList();
controller.caffeineCaches = Collections.emptyList();
// when:
final Map<String, CacheInfo> json = controller.getCacheMetricsJson();
// then:
assertThat(json.get("test").getName(), is("test"));
}
@Test
public void shouldExposeMetrics() {
// given:
final CachePublicMetrics metrics = mock(CachePublicMetrics.class);
when(metrics.metrics()).thenReturn(asList(new Metric<Number>("cache.test.foo", 42L)));
// and:
final CacheInfoController controller = new CacheInfoController();
controller.cacheMetrics = metrics;
controller.cacheConfigs = Collections.emptyList();
controller.caffeineCaches = Collections.emptyList();
// when:
final Map<String, CacheInfo> json = controller.getCacheMetricsJson();
// then:
assertThat(json.get("test").getMetrics().get("foo"), is(42L));
}
@Test
public void shouldEnrichWithSpecification() {
// given:
final CachePublicMetrics metrics = mock(CachePublicMetrics.class);
when(metrics.metrics()).thenReturn(asList(new Metric<Number>("cache.test.foo", 42L)));
// and:
final CacheInfoController controller = new CacheInfoController();
controller.cacheMetrics = metrics;
controller.cacheConfigs = asList(new CaffeineCacheConfig("test", "recordStats"));
controller.caffeineCaches = Collections.emptyList();
// when:
final Map<String, CacheInfo> json = controller.getCacheMetricsJson();
// then:
assertThat(json.get("test").getSpecification().get("recordStats"), is("true"));
}
@Test
public void shouldEnrichWithSpecificationFromCaffeineCache() {
// given:
final CachePublicMetrics metrics = mock(CachePublicMetrics.class);
when(metrics.metrics()).thenReturn(asList(new Metric<Number>("cache.test.foo", 42L)));
// and:
final CacheInfoController controller = new CacheInfoController();
controller.cacheMetrics = metrics;
controller.cacheConfigs = Collections.emptyList();
controller.caffeineCaches = asList(new CaffeineCache("test", from("recordStats").build()));
// when:
final Map<String, CacheInfo> json = controller.getCacheMetricsJson();
// then:
assertThat(json.get("test").getSpecification().get("recordStats"), is("true"));
}
}