// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.container.http;
import com.yahoo.config.model.builder.xml.test.DomBuilderTest;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.container.core.ChainsConfig;
import com.yahoo.jdisc.http.ServerConfig;
import com.yahoo.vespa.model.container.component.BindingPattern;
import com.yahoo.vespa.model.container.component.UserBindingPattern;
import com.yahoo.vespa.model.container.xml.ContainerModelBuilder;
import org.junit.jupiter.api.Test;
import org.w3c.dom.Element;
import java.util.Map;
import java.util.Set;
import static java.util.stream.Collectors.toMap;
import static java.util.stream.Collectors.toSet;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author bjorncs
*/
public class DefaultFilterTest extends DomBuilderTest {
private void buildContainerCluster(Element containerElem) {
new ContainerModelBuilder(true, ContainerModelBuilder.Networking.enable).build(DeployState.createTestState(), null, null, root, containerElem);
root.freezeModelTopology();
}
@Test
void default_request_and_response_filters_in_services_xml_are_listen_in_server_config() {
BindingPattern binding = UserBindingPattern.fromHttpPath("/my-chain-binding");
Element xml = parse(
"",
" ",
" ",
" ",
" " + binding.patternString() + "",
" ",
" ",
" " + binding.patternString() + "",
" ",
" " +
" ",
" ",
" ",
" ",
" ",
"");
buildContainerCluster(xml);
assertDefaultFiltersInConfig(root.getConfig(ServerConfig.class, "container/http/jdisc-jetty/server1"));
assertDefaultFiltersInConfig(root.getConfig(ServerConfig.class, "container/http/jdisc-jetty/server2"));
ChainsConfig chainsConfig = root.getConfig(ChainsConfig.class, "container/filters/chain");
Set chainsIds = chainsConfig.chains().stream().map(ChainsConfig.Chains::id).collect(toSet());
assertEquals(chainsIds, Set.of("request-chain-with-binding", "response-chain-with-binding", "my-default-request-chain", "my-default-response-chain"));
}
private static void assertDefaultFiltersInConfig(ServerConfig config) {
var asMap = config.defaultFilters().stream().collect(toMap(ServerConfig.DefaultFilters::filterId, ServerConfig.DefaultFilters::localPort));
assertEquals(asMap, Map.of("my-default-request-chain", 8000, "my-default-response-chain", 8000));
}
}