@@ -24,7 +24,7 @@ import com.expedia.open.tracing.Span
2424import com .expedia .open .tracing .api .Trace
2525import com .expedia .open .tracing .buffer .SpanBuffer
2626import com .expedia .www .haystack .trace .commons .clients .cassandra .CassandraTableSchema
27- import com .expedia .www .haystack .trace .reader .stores .readers .cassandra .{ CassandraReadRawTracesResultListener , CassandraReadTraceResultListener }
27+ import com .expedia .www .haystack .trace .reader .stores .readers .cassandra .CassandraReadRawTracesResultListener
2828import com .expedia .www .haystack .trace .reader .unit .BaseUnitTestSpec
2929import io .grpc .{Status , StatusException }
3030import org .easymock .EasyMock
@@ -40,6 +40,7 @@ class CassandraReadRawTracesResultListenerSpec extends BaseUnitTestSpec {
4040 val resultSet = mock[ResultSet ]
4141 val promise = mock[Promise [Seq [Trace ]]]
4242 val failureMeter = mock[Meter ]
43+ val tracesFailures = mock[Meter ]
4344 val timer = mock[Timer .Context ]
4445
4546 val mockSpanBufferRow_1 = mock[Row ]
@@ -56,8 +57,10 @@ class CassandraReadRawTracesResultListenerSpec extends BaseUnitTestSpec {
5657
5758
5859 val capturedTraces = EasyMock .newCapture[Seq [Trace ]]()
60+ val capturedMeter = EasyMock .newCapture[Int ]()
5961 expecting {
6062 timer.close()
63+ tracesFailures.mark(EasyMock .capture(capturedMeter))
6164 mockReadResult.get().andReturn(resultSet)
6265 resultSet.all().andReturn(List (mockSpanBufferRow_1, mockSpanBufferRow_2, mockSpanBufferRow_3).asJava)
6366 mockSpanBufferRow_1.getBytes(CassandraTableSchema .SPANS_COLUMN_NAME ).andReturn(ByteBuffer .wrap(spanBuffer_1.toByteArray))
@@ -66,14 +69,16 @@ class CassandraReadRawTracesResultListenerSpec extends BaseUnitTestSpec {
6669 promise.success(EasyMock .capture(capturedTraces)).andReturn(promise)
6770 }
6871
69- whenExecuting(mockReadResult, promise, failureMeter, timer, resultSet, mockSpanBufferRow_1, mockSpanBufferRow_2, mockSpanBufferRow_3) {
70- val listener = new CassandraReadRawTracesResultListener (mockReadResult, timer, failureMeter, promise )
72+ whenExecuting(mockReadResult, promise, tracesFailures, failureMeter, timer, resultSet, mockSpanBufferRow_1, mockSpanBufferRow_2, mockSpanBufferRow_3) {
73+ val listener = new CassandraReadRawTracesResultListener (mockReadResult, promise, timer, failureMeter, tracesFailures, 2 )
7174 listener.run()
7275 val traceIdSpansMap : Map [String , Set [String ]] = capturedTraces.getValue.map(capturedTrace =>
7376 capturedTrace.getTraceId -> capturedTrace.getChildSpansList.asScala.map(_.getSpanId).toSet).toMap
7477
7578 traceIdSpansMap(" TRACE_ID1" ) shouldEqual Set (" SPAN_ID_1" , " SPAN_ID_2" )
7679 traceIdSpansMap(" TRACE_ID3" ) shouldEqual Set (" SPAN_ID_3" )
80+
81+ capturedMeter.getValue shouldEqual 0
7782 }
7883 }
7984
@@ -82,6 +87,7 @@ class CassandraReadRawTracesResultListenerSpec extends BaseUnitTestSpec {
8287 val resultSet = mock[ResultSet ]
8388 val promise = mock[Promise [Seq [Trace ]]]
8489 val failureMeter = mock[Meter ]
90+ val tracesFailures = mock[Meter ]
8591 val timer = mock[Timer .Context ]
8692
8793 val mockSpanBufferRow_1 = mock[Row ]
@@ -90,42 +96,49 @@ class CassandraReadRawTracesResultListenerSpec extends BaseUnitTestSpec {
9096 val span_1 = Span .newBuilder().setTraceId(" TRACE_ID" ).setSpanId(" SPAN_ID_1" )
9197 val spanBuffer_1 = SpanBuffer .newBuilder().setTraceId(" TRACE_ID" ).addChildSpans(span_1).build()
9298
99+ val capturedMeter = EasyMock .newCapture[Int ]()
93100 expecting {
94101 timer.close()
95102 failureMeter.mark()
103+ tracesFailures.mark(EasyMock .capture(capturedMeter))
96104 mockReadResult.get().andReturn(resultSet)
97105 resultSet.all().andReturn(List (mockSpanBufferRow_1, mockSpanBufferRow_2).asJava)
98106 mockSpanBufferRow_1.getBytes(CassandraTableSchema .SPANS_COLUMN_NAME ).andReturn(ByteBuffer .wrap(spanBuffer_1.toByteArray))
99107 mockSpanBufferRow_2.getBytes(CassandraTableSchema .SPANS_COLUMN_NAME ).andReturn(ByteBuffer .wrap(" illegal bytes" .getBytes))
100108 promise.failure(EasyMock .anyObject()).andReturn(promise)
101109 }
102110
103- whenExecuting(mockReadResult, promise, failureMeter, timer, resultSet, mockSpanBufferRow_1, mockSpanBufferRow_2) {
104- val listener = new CassandraReadRawTracesResultListener (mockReadResult, timer, failureMeter, promise )
111+ whenExecuting(mockReadResult, promise, failureMeter, tracesFailures, timer, resultSet, mockSpanBufferRow_1, mockSpanBufferRow_2) {
112+ val listener = new CassandraReadRawTracesResultListener (mockReadResult, promise, timer, failureMeter, tracesFailures, 1 )
105113 listener.run()
114+ capturedMeter.getValue shouldEqual 1
106115 }
107116 }
108117
109118 it(" should return an exception for empty traceId" ) {
110119 val mockReadResult = mock[ResultSetFuture ]
111120 val resultSet = mock[ResultSet ]
112- val promise = mock[Promise [Trace ]]
121+ val promise = mock[Promise [Seq [ Trace ] ]]
113122 val failureMeter = mock[Meter ]
123+ val tracesFailures = mock[Meter ]
114124 val timer = mock[Timer .Context ]
115125
116126 val capturedException = EasyMock .newCapture[StatusException ]()
127+ val capturedMeter = EasyMock .newCapture[Int ]()
117128 expecting {
118129 timer.close()
119130 failureMeter.mark()
131+ tracesFailures.mark(EasyMock .capture(capturedMeter))
120132 mockReadResult.get().andReturn(resultSet)
121133 resultSet.all().andReturn(List [Row ]().asJava)
122134 promise.failure(EasyMock .capture(capturedException)).andReturn(promise)
123135 }
124136
125- whenExecuting(mockReadResult, promise, failureMeter, timer, resultSet) {
126- val listener = new CassandraReadTraceResultListener (mockReadResult, timer, failureMeter, promise )
137+ whenExecuting(mockReadResult, promise, failureMeter, tracesFailures, timer, resultSet) {
138+ val listener = new CassandraReadRawTracesResultListener (mockReadResult, promise, timer, failureMeter, tracesFailures, 0 )
127139 listener.run()
128140 capturedException.getValue.getStatus.getCode shouldEqual Status .NOT_FOUND .getCode
141+ capturedMeter.getValue shouldEqual 0
129142 }
130143 }
131144 }
0 commit comments