Commit 4725ef7
[OPIK-2856] [BE] Refactor test code to use TraceResourceClient instead of direct URL_TEMPLATE calls (#3947)
* [NA] [BE] Upgrade MySQL container from Testcontainers
* Fix imports order
* [OPIK-2856] [BE] Implement UUIDv7 time-based filtering for traces
- Add InstantToUUIDMapper to convert Instant timestamps to UUIDv7 bounds
- Add InstantParamConverter to parse ISO-8601 and epoch millisecond time parameters
- Update TracesResource to accept from_time and to_time parameters on /traces and /traces/stats endpoints
- Update TraceDAO to apply UUID-based time filtering using BETWEEN clause on id column
- Update TraceSearchCriteria to include uuidFromTime and uuidToTime fields
- Add comprehensive integration tests for time filtering with boundary conditions
- All tests passing: 10/10 time filtering tests + validation tests
* [OPIK-2856] Address PR review comments: improve exception handling and type safety
- Fix InstantParamConverter to catch specific DateTimeParseException instead of generic Exception
- Add debug logging when falling back to epoch milliseconds parsing
- Refactor anonymous ParamConverter class to named InstantConverter inner class for clarity
- Suppress unchecked cast with @SuppressWarnings annotation
- Fix MySQLContainerUtils return type to use MySQLContainer<?> for type safety
* [OPIK-2856] Fix InstantToUUIDMapperTest to match implementation
- Update tests to reflect that toUpperBound uses next millisecond (+1ms) for inclusive BETWEEN queries
- Remove outdated assertions expecting same timestamp in both bounds
- Verify upper bound is lexicographically greater than lower bound
- All 13 tests now passing
* Remove setup duplicated code
* Revision 2: Address PR review comments - LOW priority fixes
- #7: Add INSTANCE singleton pattern for InstantConverter
- #8: Use StringUtils.isEmpty() for null-safe empty check
- Note: #2 and #3 already addressed in previous commit
* Revision 3: Use IdGenerator.getTimeOrderedEpoch() for UUID bounds
- Simplified InstantToUUIDMapper to use IdGenerator.getTimeOrderedEpoch() instead of convertOtelIdToUUIDv7
- Per UUIDv7 RFC, sub-millisecond 12 bits are optional with millisecond granularity
- Start/end interval semantics with ±1ms ensures correct BETWEEN query results
- This approach has been battle-tested for months without issues per reviewer recommendation
- Converted InstantToUUIDMapper to @singleton service for proper DI integration
- Updated TracesResource to inject InstantToUUIDMapper dependency
- Updated tests to properly mock IdGenerator dependency
* Fix tests
* [OPIK-2856] [BE] Split Get spans Tests
* Fix format
* Revision 2: Extract duplicated span creation logic into createSpanWithTimestamp helper method
* [OPIK-2856] [BE] Implement UUIDv7 time-based filtering for spans
* Revision 3: Extract workspace setup duplication into setupTestWorkspace helper method and fix transformTestParams call
* [OPIK-2856] Refactor TracesResourceTest to use TraceResourceClient instead of direct URL_TEMPLATE calls
- Replace all direct client.target(URL_TEMPLATE) calls with TraceResourceClient methods
- Add callFeedbackScoresWithCookie method to TraceResourceClient for session token authentication
- Add callRetrieveThreadResponseWithCookie method to TraceResourceClient for session token authentication
- Fix feedback batch endpoint by using callFeedbackScores and callFeedbackScoresWithCookie
- Add null checks for query parameters to prevent NPE errors
- Fix API key vs session token usage in authentication tests
- Rename get__whenApiKeyIsPresent__thenReturnTraceThread to get__whenSessionTokenIsPresent__thenReturnTraceThread in SessionTokenCookie class
- Add mockGetWorkspaceIdByName() calls for proper workspace mocking
- Preserve original test assertions and behavior
- All tests properly refactored to use resource client methods instead of direct HTTP calls
* [OPIK-2856] Remove duplicate methods from TraceResourceClient
- Remove callGetTraces() - duplicate of callGetTracesWithQueryParams()
- Remove callSearchTraces() - duplicate of callSearchTracesStream()
- Reduced code duplication and maintenance burden
* Fix tests
* Revision 2: Address Copilot review comments - remove redundant wrapper method and add clarifying comment
* Revision 3: Extract duplicated path splitting logic into helper method addPathSegments()
* Revision 4: Make getWebTarget() private and add callGetTraceThreadsWithSorting() public method
* Revision 7: Move addPathSegments() and addQueryParameters() helper methods to BaseCommentResourceClient1 parent 945b0f6 commit 4725ef7
6 files changed
Lines changed: 1699 additions & 1327 deletions
File tree
- apps/opik-backend/src/test/java/com/comet/opik/api/resources
- utils/resources
- v1/priv
Lines changed: 31 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| 16 | + | |
15 | 17 | | |
16 | 18 | | |
17 | 19 | | |
| |||
105 | 107 | | |
106 | 108 | | |
107 | 109 | | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
108 | 139 | | |
Lines changed: 43 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
11 | 12 | | |
12 | 13 | | |
13 | 14 | | |
| 15 | + | |
14 | 16 | | |
15 | 17 | | |
16 | 18 | | |
| |||
128 | 130 | | |
129 | 131 | | |
130 | 132 | | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
131 | 174 | | |
132 | 175 | | |
133 | 176 | | |
| |||
0 commit comments