/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gobblin.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; import java.util.Collection; import java.util.Properties; import java.util.Set; import org.apache.commons.io.FileUtils; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import gobblin.configuration.ConfigurationKeys; import gobblin.runtime.job_catalog.PackagedTemplatesJobCatalogDecorator; import gobblin.runtime.template.HOCONInputStreamJobTemplate; import gobblin.runtime.template.ResourceBasedJobTemplate; /** * Testing the functions for reading template merging template with user-specified attributes. * 1. Reading the template configuration, testing size or something * 2. Testing the required attributes result. */ @Test(groups = {"gobblin.runtime"}) public class TemplateTest { // For template inside resource folder. private File jobConfigDir; private Properties userProp ; @BeforeClass public void setUp() throws IOException, URISyntaxException { // Creating userCustomized stuff this.jobConfigDir = Files.createTempDirectory(String.format("gobblin-test_%s_job-conf", this.getClass().getSimpleName())).toFile(); FileUtils.forceDeleteOnExit(this.jobConfigDir); //User specified file content: this.userProp = new Properties(); userProp.setProperty("a", "1"); userProp.setProperty("templated0", "2"); userProp.setProperty("required0", "r0"); userProp.setProperty("required1", "r1"); userProp.setProperty("required2", "r2"); userProp.setProperty("job.template", "templates/test.template"); // User specified file's name : /[jobConfigDirName]/user.attr userProp.store(new FileWriter(new File(this.jobConfigDir, "user.attr")), ""); } @Test public void testRequiredAttrList() throws Exception { Properties jobProps = this.userProp; Collection<String> requiredConfigList = ResourceBasedJobTemplate.forURI(new URI( jobProps.getProperty(ConfigurationKeys.JOB_TEMPLATE_PATH)), new PackagedTemplatesJobCatalogDecorator()) .getRequiredConfigList(); Assert.assertEquals(requiredConfigList.size(), 3); Assert.assertTrue( requiredConfigList.contains("required0")); Assert.assertTrue( requiredConfigList.contains("required1")); Assert.assertTrue( requiredConfigList.contains("required2")); } // Testing the resolving of userCustomized attributes and template is correct. @Test public void testResolvingConfig() throws Exception { Config jobProps = ConfigFactory.parseProperties(this.userProp); Assert.assertEquals(ConfigUtils.configToProperties(jobProps).size(), 6); jobProps = ResourceBasedJobTemplate.forResourcePath(jobProps.getString(ConfigurationKeys.JOB_TEMPLATE_PATH), new PackagedTemplatesJobCatalogDecorator()) .getResolvedConfig(jobProps); // Remove job.template in userSpecified file and gobblin.template.required_attributes in template Assert.assertEquals(ConfigUtils.configToProperties(jobProps).size(), 8); Properties targetResolvedJobProps = new Properties() ; targetResolvedJobProps.setProperty("a", "1"); targetResolvedJobProps.setProperty("templated0", "2"); targetResolvedJobProps.setProperty("templated1", "y"); targetResolvedJobProps.setProperty("required0","r0"); targetResolvedJobProps.setProperty("required1","r1"); targetResolvedJobProps.setProperty("required2","r2"); targetResolvedJobProps.setProperty(ConfigurationKeys.JOB_TEMPLATE_PATH, "templates/test.template"); targetResolvedJobProps.setProperty(ConfigurationKeys.REQUIRED_ATRRIBUTES_LIST, "required0,required1,required2"); Assert.assertEquals(targetResolvedJobProps, ConfigUtils.configToProperties(jobProps)); } @AfterClass public void tearDown() throws IOException { if (this.jobConfigDir != null) { FileUtils.forceDelete(this.jobConfigDir); } } }