diff options
author | Harald Musum <musum@verizonmedia.com> | 2021-01-06 13:18:34 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2021-01-06 13:18:34 +0100 |
commit | 4a46bed162bad77baaf955cfc3eb3f6b0ed1d4b2 (patch) | |
tree | c5063e2a05d3b03640e1e1854eff141890053672 /config-application-package | |
parent | 12b1ce99916dab082504479c82993562ca5d0c80 (diff) |
Throw exception if services.xml is empty
Diffstat (limited to 'config-application-package')
2 files changed, 27 insertions, 3 deletions
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java index ffc975d8668..341e22ce312 100644 --- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java +++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java @@ -616,13 +616,21 @@ public class FilesApplicationPackage implements ApplicationPackage { ! name.equals(SERVICES) && ! name.equals(HOSTS) && ! name.equals(CONFIG_DEFINITIONS_DIR)); - preprocessXML(new File(preprocessedDir, SERVICES), getServicesFile(), zone); + File servicesFile = validateServicesFile(); + preprocessXML(new File(preprocessedDir, SERVICES), servicesFile, zone); preprocessXML(new File(preprocessedDir, HOSTS), getHostsFile(), zone); FilesApplicationPackage preprocessed = FilesApplicationPackage.fromFile(preprocessedDir, includeSourceFiles); preprocessed.copyUserDefsIntoApplication(); return preprocessed; } + private File validateServicesFile() throws IOException { + File servicesFile = getServicesFile(); + if ( ! servicesFile.exists() || IOUtils.readFile(servicesFile).isEmpty()) + throw new IllegalArgumentException(SERVICES + " in application package is empty"); + return servicesFile; + } + private void copyUserDefsIntoApplication() { File destination = appSubDirs.configDefs(); destination.mkdir(); diff --git a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java index dcc75fff540..2a1ba3adc36 100644 --- a/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java +++ b/config-application-package/src/test/java/com/yahoo/config/model/application/provider/FilesApplicationPackageTest.java @@ -1,4 +1,4 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.model.application.provider; import com.yahoo.config.application.TestBase; @@ -9,25 +9,30 @@ import com.yahoo.config.provision.Zone; import com.yahoo.io.IOUtils; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.nio.file.Files; +import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author Ulf Lilleengen - * @since 5.25 */ public class FilesApplicationPackageTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); + @Test public void testPreprocessing() throws IOException { File appDir = temporaryFolder.newFolder(); @@ -101,4 +106,15 @@ public class FilesApplicationPackageTest { assertEquals(IOUtils.readAll(app.getDeployment().get()), IOUtils.readAll(new FileReader(deployment))); } + @Test + public void failOnEmptyServicesXml() throws IOException { + File appDir = temporaryFolder.newFolder(); + IOUtils.copyDirectory(new File("src/test/resources/multienvapp"), appDir); + Files.delete(new File(appDir, "services.xml").toPath()); + FilesApplicationPackage app = FilesApplicationPackage.fromFile(appDir); + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage(containsString("services.xml in application package is empty")); + app.preprocess(new Zone(Environment.dev, RegionName.defaultName()), new BaseDeployLogger()); + } + } |