77import static org .junit .jupiter .api .Assertions .assertEquals ;
88import static org .mockito .ArgumentMatchers .any ;
99import static org .mockito .ArgumentMatchers .anyCollection ;
10+ import static org .mockito .ArgumentMatchers .anyString ;
1011import static org .mockito .Mockito .doAnswer ;
1112import static org .mockito .Mockito .mock ;
13+ import static org .mockito .Mockito .when ;
1214
1315import com .google .inject .AbstractModule ;
1416import com .google .inject .Guice ;
2527import java .util .Optional ;
2628import java .util .Set ;
2729import java .util .stream .Collectors ;
30+ import org .hypertrace .core .graphql .attributes .AttributeModel ;
31+ import org .hypertrace .core .graphql .attributes .AttributeStore ;
2832import org .hypertrace .core .graphql .common .request .AttributeAssociation ;
2933import org .hypertrace .core .graphql .common .request .AttributeRequest ;
34+ import org .hypertrace .core .graphql .common .request .AttributeRequestBuilder ;
3035import org .hypertrace .core .graphql .common .request .FilterRequestBuilder ;
3136import org .hypertrace .core .graphql .common .request .ResultSetRequest ;
3237import org .hypertrace .core .graphql .common .schema .results .arguments .filter .FilterArgument ;
3338import org .hypertrace .core .graphql .common .utils .Converter ;
39+ import org .hypertrace .core .graphql .span .dao .DaoTestUtil .DefaultAttributeRequest ;
3440import org .hypertrace .core .graphql .span .dao .DaoTestUtil .DefaultResultSetRequest ;
3541import org .hypertrace .core .graphql .span .dao .DaoTestUtil .DefaultSpanRequest ;
3642import org .hypertrace .core .graphql .span .dao .DaoTestUtil .DefaultTimeRange ;
@@ -54,6 +60,10 @@ class SpanLogEventRequestBuilderTest {
5460
5561 @ Mock private FilterRequestBuilder filterRequestBuilder ;
5662
63+ @ Mock private AttributeStore attributeStore ;
64+
65+ @ Mock private AttributeRequestBuilder attributeRequestBuilder ;
66+
5767 private SpanLogEventRequestBuilder spanLogEventRequestBuilder ;
5868
5969 @ BeforeEach
@@ -82,11 +92,13 @@ protected void configure() {
8292 new TypeLiteral <Converter <Collection <AttributeRequest >, Set <Expression >>>() {}));
8393
8494 spanLogEventRequestBuilder =
85- new SpanLogEventRequestBuilder (attributeConverter , filterConverter , filterRequestBuilder );
86- }
95+ new SpanLogEventRequestBuilder (
96+ attributeConverter ,
97+ filterConverter ,
98+ filterRequestBuilder ,
99+ attributeStore ,
100+ attributeRequestBuilder );
87101
88- @ Test
89- void testBuildRequest () {
90102 doAnswer (
91103 invocation -> {
92104 Set <FilterArgument > filterArguments = invocation .getArgument (2 , Set .class );
@@ -103,6 +115,21 @@ void testBuildRequest() {
103115 .when (filterRequestBuilder )
104116 .build (any (), any (), anyCollection ());
105117
118+ when (attributeStore .getForeignIdAttribute (any (), anyString (), anyString ()))
119+ .thenReturn (Single .just (spanIdAttribute .attribute ()));
120+
121+ doAnswer (
122+ invocation -> {
123+ AttributeModel attributeModel = invocation .getArgument (0 , AttributeModel .class );
124+ return new DefaultAttributeRequest (attributeModel );
125+ })
126+ .when (attributeRequestBuilder )
127+ .buildForAttribute (any ());
128+ }
129+
130+ @ Test
131+ void testBuildRequest () {
132+
106133 long startTime = System .currentTimeMillis ();
107134 long endTime = System .currentTimeMillis () + Duration .ofHours (1 ).toMillis ();
108135
@@ -149,7 +176,58 @@ void testBuildRequest() {
149176 assertEquals (
150177 Set .of ("attributes" , "traceId" , "spanId" ),
151178 logEventsRequest .getSelectionList ().stream ()
152- .map (v -> v .getColumnIdentifier ().getColumnName ())
179+ .map (expression -> expression .getColumnIdentifier ().getColumnName ())
180+ .collect (Collectors .toSet ()));
181+ }
182+
183+ @ Test
184+ void testBuildRequest_addSpanId () {
185+ long startTime = System .currentTimeMillis ();
186+ long endTime = System .currentTimeMillis () + Duration .ofHours (1 ).toMillis ();
187+
188+ Collection <AttributeRequest > logAttributeRequests = List .of (traceIdAttribute );
189+ ResultSetRequest resultSetRequest =
190+ new DefaultResultSetRequest (
191+ null ,
192+ List .of (DaoTestUtil .eventIdAttribute ),
193+ new DefaultTimeRange (Instant .ofEpochMilli (startTime ), Instant .ofEpochMilli (endTime )),
194+ DaoTestUtil .eventIdAttribute ,
195+ 0 ,
196+ 0 ,
197+ List .of (),
198+ Collections .emptyList (),
199+ Optional .empty ());
200+ SpanRequest spanRequest = new DefaultSpanRequest (resultSetRequest , logAttributeRequests );
201+
202+ LogEventsRequest logEventsRequest =
203+ spanLogEventRequestBuilder .buildLogEventsRequest (spanRequest , spansResponse ).blockingGet ();
204+
205+ assertEquals (Operator .IN , logEventsRequest .getFilter ().getChildFilter (0 ).getOperator ());
206+ assertEquals (
207+ spanIdAttribute .attribute ().id (),
208+ logEventsRequest
209+ .getFilter ()
210+ .getChildFilter (0 )
211+ .getLhs ()
212+ .getColumnIdentifier ()
213+ .getColumnName ());
214+ assertEquals (
215+ List .of ("span1" , "span2" , "span3" ),
216+ logEventsRequest
217+ .getFilter ()
218+ .getChildFilter (0 )
219+ .getRhs ()
220+ .getLiteral ()
221+ .getValue ()
222+ .getStringArrayList ()
223+ .stream ()
224+ .collect (Collectors .toList ()));
225+ assertEquals (startTime , logEventsRequest .getStartTimeMillis ());
226+ assertEquals (endTime , logEventsRequest .getEndTimeMillis ());
227+ assertEquals (
228+ Set .of ("traceId" , "spanId" ),
229+ logEventsRequest .getSelectionList ().stream ()
230+ .map (expression -> expression .getColumnIdentifier ().getColumnName ())
153231 .collect (Collectors .toSet ()));
154232 }
155233}
0 commit comments