@Test
    void testTyped() {
        String configId = "dir:src/test/java/com/yahoo/search/query/profile/config/test/typed";
        System.setProperty("config.id", configId);
        Container container = new Container();
        HandlersConfigurerTestWrapper configurer = new HandlersConfigurerTestWrapper(container, configId);
        SearchHandler searchHandler = (SearchHandler) configurer.getRequestHandlerRegistry().getComponent(SearchHandler.class.getName());

        // Should get "default" query profile containing the "test" search chain containing the "test" searcher
        HttpRequest request = HttpRequest.createTestRequest("search", Method.GET);
        HttpSearchResponse response = (HttpSearchResponse) searchHandler.handle(request); // Cast to access content directly
        assertNotNull(response.getResult().hits().get("from:test"));

        // Should get the "test' query profile containing the "default" search chain containing the "default" searcher
        request = HttpRequest.createTestRequest("search?queryProfile=test", Method.GET);
        response = (HttpSearchResponse) searchHandler.handle(request); // Cast to access content directly
        assertNotNull(response.getResult().hits().get("from:default"));

        // Should get "default" query profile, but override the search chain to default
        request = HttpRequest.createTestRequest("search?searchChain=default", Method.GET);
        response = (HttpSearchResponse) searchHandler.handle(request); // Cast to access content directly
        assertNotNull(response.getResult().hits().get("from:default"));

        // Tests a profile setting hits and offset
        request = HttpRequest.createTestRequest("search?queryProfile=hitsoffset", Method.GET);
        response = (HttpSearchResponse) searchHandler.handle(request); // Cast to access content directly
        assertEquals(22, response.getQuery().getHits());
        assertEquals(80, response.getQuery().getOffset());

        // Tests a non-resolved profile request
        request = HttpRequest.createTestRequest("search?queryProfile=none", Method.GET);
        response = (HttpSearchResponse) searchHandler.handle(request); // Cast to access content directly
        assertNotNull(response.getResult().hits().getError(), "Got an error");
        assertEquals("Could not resolve query profile 'none'", response.getResult().hits().getError().getDetailedMessage());

        // Test overriding a sub-profile in the request
        request = HttpRequest.createTestRequest("search?queryProfile=root&sub=newsub", Method.GET);
        response = (HttpSearchResponse) searchHandler.handle(request); // Cast to access content directly
        assertEquals("newsubvalue1", response.getQuery().properties().get("sub.value1"));
        assertEquals("newsubvalue2", response.getQuery().properties().get("sub.value2"));
        configurer.shutdown();
    }
Tests using query profiles in searches

@author bratseth
container-search/src/test/java/com/yahoo/search/query/profile/config/test/QueryProfileIntegrationTestCase.java