• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017, 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.testing.EqualsTester;
22 import io.opencensus.common.Function;
23 import io.opencensus.common.Functions;
24 import io.opencensus.common.Timestamp;
25 import io.opencensus.metrics.data.AttachmentValue;
26 import io.opencensus.metrics.data.AttachmentValue.AttachmentValueString;
27 import io.opencensus.metrics.data.Exemplar;
28 import io.opencensus.stats.AggregationData.CountData;
29 import io.opencensus.stats.AggregationData.DistributionData;
30 import io.opencensus.stats.AggregationData.LastValueDataDouble;
31 import io.opencensus.stats.AggregationData.LastValueDataLong;
32 import io.opencensus.stats.AggregationData.MeanData;
33 import io.opencensus.stats.AggregationData.SumDataDouble;
34 import io.opencensus.stats.AggregationData.SumDataLong;
35 import java.util.ArrayList;
36 import java.util.Arrays;
37 import java.util.Collections;
38 import java.util.List;
39 import java.util.Map;
40 import org.junit.Rule;
41 import org.junit.Test;
42 import org.junit.rules.ExpectedException;
43 import org.junit.runner.RunWith;
44 import org.junit.runners.JUnit4;
45 
46 /** Unit tests for {@link io.opencensus.stats.AggregationData}. */
47 @RunWith(JUnit4.class)
48 public class AggregationDataTest {
49 
50   private static final double TOLERANCE = 1e-6;
51   private static final Timestamp TIMESTAMP_1 = Timestamp.create(1, 0);
52   private static final Timestamp TIMESTAMP_2 = Timestamp.create(2, 0);
53   private static final AttachmentValue ATTACHMENT_VALUE = AttachmentValueString.create("value");
54   private static final Map<String, AttachmentValue> ATTACHMENTS =
55       Collections.singletonMap("key", ATTACHMENT_VALUE);
56 
57   @Rule public ExpectedException thrown = ExpectedException.none();
58 
59   @Test
testCreateDistributionData()60   public void testCreateDistributionData() {
61     DistributionData distributionData =
62         DistributionData.create(7.7, 10, 32.2, Arrays.asList(4L, 1L, 5L));
63     assertThat(distributionData.getMean()).isWithin(TOLERANCE).of(7.7);
64     assertThat(distributionData.getCount()).isEqualTo(10);
65     assertThat(distributionData.getSumOfSquaredDeviations()).isWithin(TOLERANCE).of(32.2);
66     assertThat(distributionData.getBucketCounts()).containsExactly(4L, 1L, 5L).inOrder();
67   }
68 
69   @Test
testCreateDistributionDataWithExemplar()70   public void testCreateDistributionDataWithExemplar() {
71     Exemplar exemplar1 = Exemplar.create(4, TIMESTAMP_2, ATTACHMENTS);
72     Exemplar exemplar2 = Exemplar.create(1, TIMESTAMP_1, ATTACHMENTS);
73     DistributionData distributionData =
74         DistributionData.create(
75             7.7, 10, 32.2, Arrays.asList(4L, 1L), Arrays.asList(exemplar1, exemplar2));
76     assertThat(distributionData.getExemplars()).containsExactly(exemplar1, exemplar2).inOrder();
77   }
78 
79   @Test
preventNullBucketCountList()80   public void preventNullBucketCountList() {
81     thrown.expect(NullPointerException.class);
82     thrown.expectMessage("bucketCounts");
83     DistributionData.create(1, 1, 0, null);
84   }
85 
86   @Test
preventNullBucket()87   public void preventNullBucket() {
88     thrown.expect(NullPointerException.class);
89     thrown.expectMessage("bucketCount");
90     DistributionData.create(1, 1, 0, Arrays.asList(0L, 1L, null));
91   }
92 
93   @Test
preventNullExemplarList()94   public void preventNullExemplarList() {
95     thrown.expect(NullPointerException.class);
96     thrown.expectMessage("exemplars");
97     DistributionData.create(1, 1, 0, Arrays.asList(0L, 1L, 1L), null);
98   }
99 
100   @Test
preventNullExemplar()101   public void preventNullExemplar() {
102     thrown.expect(NullPointerException.class);
103     thrown.expectMessage("exemplar");
104     DistributionData.create(
105         1, 1, 0, Arrays.asList(0L, 1L, 1L), Collections.<Exemplar>singletonList(null));
106   }
107 
108   @Test
testEquals()109   public void testEquals() {
110     new EqualsTester()
111         .addEqualityGroup(SumDataDouble.create(10.0), SumDataDouble.create(10.0))
112         .addEqualityGroup(SumDataDouble.create(20.0), SumDataDouble.create(20.0))
113         .addEqualityGroup(SumDataLong.create(20), SumDataLong.create(20))
114         .addEqualityGroup(CountData.create(40), CountData.create(40))
115         .addEqualityGroup(CountData.create(80), CountData.create(80))
116         .addEqualityGroup(
117             DistributionData.create(10, 10, 0, Arrays.asList(0L, 10L, 0L)),
118             DistributionData.create(10, 10, 0, Arrays.asList(0L, 10L, 0L)))
119         .addEqualityGroup(DistributionData.create(10, 10, 0, Arrays.asList(0L, 10L, 100L)))
120         .addEqualityGroup(DistributionData.create(110, 10, 0, Arrays.asList(0L, 10L, 0L)))
121         .addEqualityGroup(DistributionData.create(10, 110, 0, Arrays.asList(0L, 10L, 0L)))
122         .addEqualityGroup(DistributionData.create(10, 10, 10, Arrays.asList(0L, 10L, 0L)))
123         .addEqualityGroup(DistributionData.create(10, 10, 0, Arrays.asList(0L, 110L, 0L)))
124         .addEqualityGroup(MeanData.create(5.0, 1), MeanData.create(5.0, 1))
125         .addEqualityGroup(MeanData.create(-5.0, 1), MeanData.create(-5.0, 1))
126         .addEqualityGroup(LastValueDataDouble.create(20.0), LastValueDataDouble.create(20.0))
127         .addEqualityGroup(LastValueDataLong.create(20), LastValueDataLong.create(20))
128         .testEquals();
129   }
130 
131   @Test
testMatchAndGet()132   public void testMatchAndGet() {
133     List<AggregationData> aggregations =
134         Arrays.asList(
135             SumDataDouble.create(10.0),
136             SumDataLong.create(100000000),
137             CountData.create(40),
138             DistributionData.create(1, 1, 0, Arrays.asList(0L, 10L, 0L)),
139             LastValueDataDouble.create(20.0),
140             LastValueDataLong.create(200000000L));
141 
142     final List<Object> actual = new ArrayList<Object>();
143     for (AggregationData aggregation : aggregations) {
144       aggregation.match(
145           new Function<SumDataDouble, Void>() {
146             @Override
147             public Void apply(SumDataDouble arg) {
148               actual.add(arg.getSum());
149               return null;
150             }
151           },
152           new Function<SumDataLong, Void>() {
153             @Override
154             public Void apply(SumDataLong arg) {
155               actual.add(arg.getSum());
156               return null;
157             }
158           },
159           new Function<CountData, Void>() {
160             @Override
161             public Void apply(CountData arg) {
162               actual.add(arg.getCount());
163               return null;
164             }
165           },
166           new Function<DistributionData, Void>() {
167             @Override
168             public Void apply(DistributionData arg) {
169               actual.add(arg.getBucketCounts());
170               return null;
171             }
172           },
173           new Function<LastValueDataDouble, Void>() {
174             @Override
175             public Void apply(LastValueDataDouble arg) {
176               actual.add(arg.getLastValue());
177               return null;
178             }
179           },
180           new Function<LastValueDataLong, Void>() {
181             @Override
182             public Void apply(LastValueDataLong arg) {
183               actual.add(arg.getLastValue());
184               return null;
185             }
186           },
187           Functions.<Void>throwIllegalArgumentException());
188     }
189 
190     assertThat(actual)
191         .containsExactly(10.0, 100000000L, 40L, Arrays.asList(0L, 10L, 0L), 20.0, 200000000L)
192         .inOrder();
193   }
194 }
195