content: package com.soundcloud.prometheus.hystrix;
  
  import com.netflix.hystrix.Hystrix;
  import io.prometheus.client.CollectorRegistry;
  import io.prometheus.client.exporter.common.TextFormat;
  import org.assertj.core.api.Assertions;
  import org.junit.After;
  import org.junit.Test;
  
  import java.io.FileWriter;
  import java.io.IOException;
  import java.io.StringWriter;
  import java.io.Writer;
  
  /**
   * @author Alexander Schwartz 2017
   */
  public class MetricsListTest {
  
      @After
      public void teardown() {
          Hystrix.reset();
          CollectorRegistry.defaultRegistry.clear();
      }
  
      @Test
      public void shouldWriteNiceMetricsOutput() throws IOException {
          // given
          HystrixPrometheusMetricsPublisher.builder()
                  .shouldExportDeprecatedMetrics(false)
                  .shouldExportProperties(true)
                  .buildAndRegister();
          TestHystrixCommand command = new TestHystrixCommand("any");
  
          // when
          command.execute();
  
          // then
          Writer writer = new FileWriter("target/sample.txt");
          try {
              TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples());
              writer.flush();
          } finally {
              writer.close();
          }
      }
  
      @Test
      public void shouldHaveExponentialBuckets() throws IOException {
          // given
          HystrixPrometheusMetricsPublisher.builder().withExponentialBuckets().buildAndRegister();
          TestHystrixCommand command = new TestHystrixCommand("any");
  
          // when
          command.execute();
  
          // then
          StringWriter writer = new StringWriter();
          try {
              TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples());
              writer.flush();
          } finally {
              writer.close();
          }
          String result = writer.toString();
          Assertions.assertThat(result).contains("le=\"0.001\"");
          Assertions.assertThat(result).contains("le=\"2.5169093494697568\"");
      }
  
      @Test
      public void shouldHaveLinearBuckets() throws IOException {
          // given
          HystrixPrometheusMetricsPublisher.builder().withLinearBuckets(0.1, 0.2, 3).buildAndRegister();
          TestHystrixCommand command = new TestHystrixCommand("any");
  
          // when
          command.execute();
  
          // then
          StringWriter writer = new StringWriter();
          try {
              TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples());
              writer.flush();
          } finally {
              writer.close();
          }
          String result = writer.toString();
          Assertions.assertThat(result).contains("le=\"0.1\"");
          Assertions.assertThat(result).contains("le=\"0.5\"");
      }
  
      @Test
      public void shouldHaveDistinctBuckets() throws IOException {
          // given
          HystrixPrometheusMetricsPublisher.builder().withBuckets(0.1, 1.0).buildAndRegister();
          TestHystrixCommand command = new TestHystrixCommand("any");
  
          // when
          command.execute();
  
          // then
          StringWriter writer = new StringWriter();
          try {
              TextFormat.write004(writer, CollectorRegistry.defaultRegistry.metricFamilySamples());
              writer.flush();
          } finally {
              writer.close();
          }
          String result = writer.toString();
          Assertions.assertThat(result).contains("le=\"0.1\"");
          Assertions.assertThat(result).contains("le=\"1.0\"");
      }
  
  }
  