@Test
  public void testQueryExecutionFromServerAndPerformCacheOp() throws Exception {
    gfsh.executeAndAssertThat("create region --name=exampleRegion --type=REPLICATE")
        .statusIsSuccess();

    locator.waitUntilRegionIsReadyOnExactlyThisManyServers(SEPARATOR + "exampleRegion", 2);
    server1.invoke(() -> populateRegion(0, 100));

    // execute the query from one server
    server1.invoke(QueryMonitorDUnitTest::executeQueries);

    // Create index and Perform cache op. Bug#44307
    server1.invoke(() -> {
      QueryService queryService = ClusterStartupRule.getCache().getQueryService();
      queryService.createIndex("idIndex", "ID", SEPARATOR + "exampleRegion");
      queryService.createIndex("statusIndex", "status", SEPARATOR + "exampleRegion");
      populateRegion(100, 10);
    });

    // destroy indices created in this test
    gfsh.executeAndAssertThat("destroy index --region=" + SEPARATOR + "exampleRegion")
        .statusIsSuccess();
  }
These tests add a test hook to make sure query execution sleeps for at least 20 ms, so the
queryMonitor thread will get a chance to cancel the query before it completes.

The MAX_QUERY_EXECUTION_TIME is set as 1 ms, i.e, theoretically all queries will be cancelled
after 1ms, but due to thread scheduling, this may not be true. we can only decrease the flakyness
of the test by making MAX_QUERY_EXECUTION_TIME the smallest possible (1) and making the query
execution time longer (but not too long to make the test run too slow).
geode-cq/src/distributedTest/java/org/apache/geode/cache/query/dunit/QueryMonitorDUnitTest.java