gobblin.util.TemplateTest.java Source code

Java tutorial

Introduction

Here is the source code for gobblin.util.TemplateTest.java

Source

/*
 * 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);
        }
    }
}