/* * Copyright 2016-17, OpenCensus Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.opencensus.stats; import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.Lists; import com.google.common.testing.EqualsTester; import io.opencensus.common.Function; import io.opencensus.common.Functions; import io.opencensus.stats.Measure.MeasureDouble; import io.opencensus.stats.Measure.MeasureLong; import java.util.Arrays; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** Tests for {@link Measure}. */ @RunWith(JUnit4.class) public final class MeasureTest { @Rule public final ExpectedException thrown = ExpectedException.none(); @Test public void testConstants() { assertThat(Measure.NAME_MAX_LENGTH).isEqualTo(255); } @Test public void preventTooLongMeasureName() { char[] chars = new char[Measure.NAME_MAX_LENGTH + 1]; Arrays.fill(chars, 'a'); String longName = String.valueOf(chars); thrown.expect(IllegalArgumentException.class); Measure.MeasureDouble.create(longName, "description", "1"); } @Test public void preventNonPrintableMeasureName() { thrown.expect(IllegalArgumentException.class); Measure.MeasureDouble.create("\2", "description", "1"); } @Test public void testMeasureDoubleComponents() { Measure measurement = Measure.MeasureDouble.create("Foo", "The description of Foo", "Mbit/s"); assertThat(measurement.getName()).isEqualTo("Foo"); assertThat(measurement.getDescription()).isEqualTo("The description of Foo"); assertThat(measurement.getUnit()).isEqualTo("Mbit/s"); } @Test public void testMeasureLongComponents() { Measure measurement = Measure.MeasureLong.create("Bar", "The description of Bar", "1"); assertThat(measurement.getName()).isEqualTo("Bar"); assertThat(measurement.getDescription()).isEqualTo("The description of Bar"); assertThat(measurement.getUnit()).isEqualTo("1"); } @Test public void testMeasureDoubleEquals() { new EqualsTester() .addEqualityGroup( Measure.MeasureDouble.create("name", "description", "bit/s"), Measure.MeasureDouble.create("name", "description", "bit/s")) .addEqualityGroup(Measure.MeasureDouble.create("name", "description 2", "bit/s")) .testEquals(); } @Test public void testMeasureLongEquals() { new EqualsTester() .addEqualityGroup( Measure.MeasureLong.create("name", "description", "bit/s"), Measure.MeasureLong.create("name", "description", "bit/s")) .addEqualityGroup(Measure.MeasureLong.create("name", "description 2", "bit/s")) .testEquals(); } @Test public void testMatch() { List<Measure> measures = Arrays.asList( MeasureDouble.create("measure1", "description", "1"), MeasureLong.create("measure2", "description", "1")); List<String> outputs = Lists.newArrayList(); for (Measure measure : measures) { outputs.add( measure.match( new Function<MeasureDouble, String>() { @Override public String apply(MeasureDouble arg) { return "double"; } }, new Function<MeasureLong, String>() { @Override public String apply(MeasureLong arg) { return "long"; } }, Functions.<String>throwAssertionError())); } assertThat(outputs).containsExactly("double", "long").inOrder(); } @Test public void testMeasureDoubleIsNotEqualToMeasureLong() { assertThat(Measure.MeasureDouble.create("name", "description", "bit/s")) .isNotEqualTo(Measure.MeasureLong.create("name", "description", "bit/s")); } }