// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.container.xml; import com.yahoo.config.docproc.SchemamappingConfig; import com.yahoo.config.model.builder.xml.test.DomBuilderTest; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.container.ComponentsConfig; import com.yahoo.container.core.ChainsConfig; import com.yahoo.container.jdisc.ContainerMbusConfig; import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.model.HostPorts; import com.yahoo.vespa.model.container.ApplicationContainer; import com.yahoo.vespa.model.container.ApplicationContainerCluster; import com.yahoo.vespa.model.container.ContainerModel; import com.yahoo.vespa.model.container.docproc.DocprocChain; import com.yahoo.vespa.model.container.docproc.DocumentProcessor; import com.yahoo.vespa.model.container.xml.ContainerModelBuilder.Networking; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.w3c.dom.Element; import java.util.HashMap; import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; /** * @author Einar M R Rosenvinge * @author gjoranv */ public class DocprocBuilderTest extends DomBuilderTest { private ApplicationContainerCluster cluster; private ContainerMbusConfig containerMbusConfig; private ComponentsConfig componentsConfig; private ChainsConfig chainsConfig; private SchemamappingConfig schemamappingConfig; private QrStartConfig qrStartConfig; @BeforeEach public void setupCluster() { ContainerModel model = new ContainerModelBuilder(false, Networking.disable).build(DeployState.createTestState(), null, null, root, servicesXml()); cluster = (ApplicationContainerCluster) model.getCluster(); cluster.getDocproc().getChains().addServersAndClientsForChains(); root.freezeModelTopology(); containerMbusConfig = root.getConfig(ContainerMbusConfig.class, cluster.getContainers().get(0).getConfigId()); componentsConfig = root.getConfig(ComponentsConfig.class, cluster.getConfigId()); chainsConfig = root.getConfig(ChainsConfig.class, cluster.getConfigId() + "/component/com.yahoo.docproc.jdisc.DocumentProcessingHandler"); schemamappingConfig = root.getConfig(SchemamappingConfig.class, cluster.getContainers().get(0).getConfigId()); qrStartConfig = root.getConfig(QrStartConfig.class, cluster.getConfigId()); } private Element servicesXml() { return parse( "", " ", " ", " ", " ", " ", " ", " ", " ", " ", ""); } @Test void testDocprocCluster() { assertEquals("banan", cluster.getName()); List services = cluster.getContainers(); assertEquals(1, services.size()); ApplicationContainer service = services.get(0); assertNotNull(service); Map chains = new HashMap<>(); for (DocprocChain chain : cluster.getDocprocChains().allChains().allComponents()) { chains.put(chain.getId().stringValue(), chain); } assertEquals(1, chains.size()); DocprocChain chain = chains.get("chein"); assertEquals("chein", chain.getId().stringValue()); assertEquals(1, chain.getInnerComponents().size()); DocumentProcessor processor = chain.getInnerComponents().iterator().next(); assertEquals("docproc2", processor.getComponentId().stringValue()); } @Test void testContainerMbusConfig() { assertTrue(containerMbusConfig.port() >= HostPorts.BASE_PORT); assertEquals(300, containerMbusConfig.maxpendingcount()); } @Test void testComponentsConfig() { Map components = new HashMap<>(); for (ComponentsConfig.Components component : componentsConfig.components()) { System.err.println(component.id()); components.put(component.id(), component); } ComponentsConfig.Components docprocHandler = components.get("com.yahoo.docproc.jdisc.DocumentProcessingHandler"); assertEquals("com.yahoo.docproc.jdisc.DocumentProcessingHandler", docprocHandler.id()); assertEquals("banan/component/com.yahoo.docproc.jdisc.DocumentProcessingHandler", docprocHandler.configId()); assertEquals("com.yahoo.docproc.jdisc.DocumentProcessingHandler", docprocHandler.classId()); assertEquals("container-search-and-docproc", docprocHandler.bundle()); ComponentsConfig.Components docproc1 = components.get("docproc1"); assertEquals("docproc1", docproc1.id()); assertEquals("banan/docprocchains/component/docproc1", docproc1.configId()); assertEquals("com.yahoo.Docproc1", docproc1.classId()); assertEquals("docproc1bundle", docproc1.bundle()); ComponentsConfig.Components docproc2 = components.get("docproc2@chein"); assertEquals("docproc2@chein", docproc2.id()); assertEquals("banan/docprocchains/chain/chein/component/docproc2", docproc2.configId()); assertEquals("docproc2", docproc2.classId()); assertEquals("docproc2", docproc2.bundle()); /* ComponentsConfig.Components health = components.get("com.yahoo.container.jdisc.state.StateHandler"); assertEquals("com.yahoo.container.jdisc.state.StateHandler", health.id())); assertEquals("com.yahoo.container.jdisc.state.StateHandler", health.classId()); assertEquals("com.yahoo.container.jdisc.state.StateHandler", health.bundle())); */ ComponentsConfig.Components sourceClient = components.get("source@MbusClient"); assertNotNull(sourceClient); assertEquals("com.yahoo.container.jdisc.messagebus.MbusClientProvider", sourceClient.classId()); assertEquals("com.yahoo.container.jdisc.messagebus.MbusClientProvider", sourceClient.bundle()); ComponentsConfig.Components intermediateClient = components.get("chain.chein@MbusClient"); assertNotNull(intermediateClient); assertEquals("com.yahoo.container.jdisc.messagebus.MbusClientProvider", intermediateClient.classId()); assertEquals("com.yahoo.container.jdisc.messagebus.MbusClientProvider", intermediateClient.bundle()); } @Test void testChainsConfig() { Map components = new HashMap<>(); for (ChainsConfig.Components component : chainsConfig.components()) { components.put(component.id(), component); } assertEquals(2, components.size()); ChainsConfig.Components docproc1 = components.get("docproc1"); assertEquals("docproc1", docproc1.id()); assertTrue(docproc1.dependencies().provides().isEmpty()); assertTrue(docproc1.dependencies().before().isEmpty()); assertTrue(docproc1.dependencies().after().isEmpty()); ChainsConfig.Components docproc2 = components.get("docproc2@chein"); assertEquals("docproc2@chein", docproc2.id()); assertTrue(docproc2.dependencies().provides().isEmpty()); assertTrue(docproc2.dependencies().before().isEmpty()); assertTrue(docproc2.dependencies().after().isEmpty()); Map chainsMap = new HashMap<>(); for (ChainsConfig.Chains chain : chainsConfig.chains()) { chainsMap.put(chain.id(), chain); } assertEquals(1, chainsMap.size()); assertEquals("chein", chainsMap.get("chein").id()); assertEquals(1, chainsMap.get("chein").components().size()); assertEquals("docproc2@chein", chainsMap.get("chein").components(0)); assertTrue(chainsMap.get("chein").inherits().isEmpty()); assertTrue(chainsMap.get("chein").excludes().isEmpty()); assertTrue(chainsMap.get("chein").phases().isEmpty()); } @Test void testSchemaMappingConfig() { assertTrue(schemamappingConfig.fieldmapping().isEmpty()); } @Test void testQrStartConfig() { QrStartConfig.Jvm jvm = qrStartConfig.jvm(); assertTrue(jvm.server()); assertTrue(jvm.verbosegc()); assertEquals("-XX:+UseG1GC -XX:MaxTenuringThreshold=15", jvm.gcopts()); assertEquals(1536, jvm.minHeapsize()); assertEquals(1536, jvm.heapsize()); assertEquals(512, jvm.stacksize()); assertEquals(0, jvm.compressedClassSpaceSize()); } }