@@ -253,6 +253,64 @@ public void testMissingResponseFromLinkedProjectsWithLenientAllowNoIndices() {
253253 assertNull (e );
254254 }
255255
256+ public void testMissingResponseFromLinkedProjectsForQualifiedExpressionWithStrictIgnoreUnavailable () {
257+ ResolvedIndexExpressions local = new ResolvedIndexExpressions (
258+ List .of (new ResolvedIndexExpression ("P1:logs" , ResolvedIndexExpression .LocalExpressions .NONE , Set .of ("P1:logs" )))
259+ );
260+
261+ // Mimic no response from P1 project.
262+ var remote = Map .of (
263+ "P2" ,
264+ new ResolvedIndexExpressions (
265+ List .of (
266+ new ResolvedIndexExpression (
267+ "not-logs*" ,
268+ new ResolvedIndexExpression .LocalExpressions (
269+ Set .of ("not-logs" ),
270+ ResolvedIndexExpression .LocalIndexResolutionResult .SUCCESS ,
271+ null
272+ ),
273+ Set .of ()
274+ )
275+ )
276+ )
277+ );
278+
279+ // logs does not exist in the remote responses and indices options are strict. We expect an error.
280+ var e = CrossProjectIndexResolutionValidator .validate (getStrictIgnoreUnavailable (), null , local , remote );
281+ assertNotNull (e );
282+ assertThat (e , instanceOf (IndexNotFoundException .class ));
283+ assertThat (e .getMessage (), containsString ("no such index [P1:logs]" ));
284+ }
285+
286+ public void testMissingResponseFromLinkedProjectsForQualifiedExpressionWithLenientIgnoreUnavailable () {
287+ ResolvedIndexExpressions local = new ResolvedIndexExpressions (
288+ List .of (new ResolvedIndexExpression ("P1:logs" , ResolvedIndexExpression .LocalExpressions .NONE , Set .of ("P1:logs" )))
289+ );
290+
291+ // Mimic no response from P1 project.
292+ var remote = Map .of (
293+ "P2" ,
294+ new ResolvedIndexExpressions (
295+ List .of (
296+ new ResolvedIndexExpression (
297+ "not-logs*" ,
298+ new ResolvedIndexExpression .LocalExpressions (
299+ Set .of ("not-logs" ),
300+ ResolvedIndexExpression .LocalIndexResolutionResult .SUCCESS ,
301+ null
302+ ),
303+ Set .of ()
304+ )
305+ )
306+ )
307+ );
308+
309+ // logs does not exist in the remote responses and indices options are lenient. We do not expect an error.
310+ var e = CrossProjectIndexResolutionValidator .validate (getLenientIndicesOptions (), null , local , remote );
311+ assertNull (e );
312+ }
313+
256314 public void testUnauthorizedFlatExpressionWithStrictIgnoreUnavailable () {
257315 final var exception = new ElasticsearchSecurityException ("authorization errors while resolving [logs]" );
258316 ResolvedIndexExpressions local = new ResolvedIndexExpressions (
0 commit comments