1 /* 2 * Copyright 2016-17, OpenCensus Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package io.opencensus.stats; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import com.google.common.collect.Lists; 22 import com.google.common.testing.EqualsTester; 23 import io.opencensus.common.Function; 24 import io.opencensus.common.Functions; 25 import io.opencensus.stats.Measure.MeasureDouble; 26 import io.opencensus.stats.Measure.MeasureLong; 27 import java.util.Arrays; 28 import java.util.List; 29 import org.junit.Rule; 30 import org.junit.Test; 31 import org.junit.rules.ExpectedException; 32 import org.junit.runner.RunWith; 33 import org.junit.runners.JUnit4; 34 35 /** Tests for {@link Measure}. */ 36 @RunWith(JUnit4.class) 37 public final class MeasureTest { 38 39 @Rule public final ExpectedException thrown = ExpectedException.none(); 40 41 @Test testConstants()42 public void testConstants() { 43 assertThat(Measure.NAME_MAX_LENGTH).isEqualTo(255); 44 } 45 46 @Test preventTooLongMeasureName()47 public void preventTooLongMeasureName() { 48 char[] chars = new char[Measure.NAME_MAX_LENGTH + 1]; 49 Arrays.fill(chars, 'a'); 50 String longName = String.valueOf(chars); 51 thrown.expect(IllegalArgumentException.class); 52 Measure.MeasureDouble.create(longName, "description", "1"); 53 } 54 55 @Test preventNonPrintableMeasureName()56 public void preventNonPrintableMeasureName() { 57 thrown.expect(IllegalArgumentException.class); 58 Measure.MeasureDouble.create("\2", "description", "1"); 59 } 60 61 @Test testMeasureDoubleComponents()62 public void testMeasureDoubleComponents() { 63 Measure measurement = Measure.MeasureDouble.create("Foo", "The description of Foo", "Mbit/s"); 64 assertThat(measurement.getName()).isEqualTo("Foo"); 65 assertThat(measurement.getDescription()).isEqualTo("The description of Foo"); 66 assertThat(measurement.getUnit()).isEqualTo("Mbit/s"); 67 } 68 69 @Test testMeasureLongComponents()70 public void testMeasureLongComponents() { 71 Measure measurement = Measure.MeasureLong.create("Bar", "The description of Bar", "1"); 72 assertThat(measurement.getName()).isEqualTo("Bar"); 73 assertThat(measurement.getDescription()).isEqualTo("The description of Bar"); 74 assertThat(measurement.getUnit()).isEqualTo("1"); 75 } 76 77 @Test testMeasureDoubleEquals()78 public void testMeasureDoubleEquals() { 79 new EqualsTester() 80 .addEqualityGroup( 81 Measure.MeasureDouble.create("name", "description", "bit/s"), 82 Measure.MeasureDouble.create("name", "description", "bit/s")) 83 .addEqualityGroup(Measure.MeasureDouble.create("name", "description 2", "bit/s")) 84 .testEquals(); 85 } 86 87 @Test testMeasureLongEquals()88 public void testMeasureLongEquals() { 89 new EqualsTester() 90 .addEqualityGroup( 91 Measure.MeasureLong.create("name", "description", "bit/s"), 92 Measure.MeasureLong.create("name", "description", "bit/s")) 93 .addEqualityGroup(Measure.MeasureLong.create("name", "description 2", "bit/s")) 94 .testEquals(); 95 } 96 97 @Test testMatch()98 public void testMatch() { 99 List<Measure> measures = 100 Arrays.asList( 101 MeasureDouble.create("measure1", "description", "1"), 102 MeasureLong.create("measure2", "description", "1")); 103 List<String> outputs = Lists.newArrayList(); 104 for (Measure measure : measures) { 105 outputs.add( 106 measure.match( 107 new Function<MeasureDouble, String>() { 108 @Override 109 public String apply(MeasureDouble arg) { 110 return "double"; 111 } 112 }, 113 new Function<MeasureLong, String>() { 114 @Override 115 public String apply(MeasureLong arg) { 116 return "long"; 117 } 118 }, 119 Functions.<String>throwAssertionError())); 120 } 121 assertThat(outputs).containsExactly("double", "long").inOrder(); 122 } 123 124 @Test testMeasureDoubleIsNotEqualToMeasureLong()125 public void testMeasureDoubleIsNotEqualToMeasureLong() { 126 assertThat(Measure.MeasureDouble.create("name", "description", "bit/s")) 127 .isNotEqualTo(Measure.MeasureLong.create("name", "description", "bit/s")); 128 } 129 } 130