/*
* 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.runtime.api;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Properties;
import org.apache.commons.lang3.SerializationUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import com.typesafe.config.ConfigValueFactory;
import gobblin.configuration.ConfigurationKeys;
/**
* Unit tests for {@link JobSpec}
*/
public class TestJobSpec {
@Test
public void testBuilder() throws URISyntaxException {
JobSpec.Builder b = new JobSpec.Builder("test:job");
JobSpec js1 = b.build();
Assert.assertEquals(js1.getUri().toString(), "test:job");
Assert.assertEquals(js1.getVersion(), "1");
Assert.assertNotNull(js1.getDescription());
Assert.assertTrue(js1.getDescription().contains("test:job"));
Assert.assertEquals(js1.getConfig().entrySet().size(), 0);
Assert.assertEquals(js1.getConfigAsProperties().size(), 0);
Properties props = new Properties();
props.put("a1", "a_value");
props.put("a2.b", "1");
props.put("a2.c.d", "12.34");
props.put("a2.c.d2", "true");
b = new JobSpec.Builder("test:job2")
.withVersion("2")
.withDescription("A test job")
.withConfigAsProperties(props);
JobSpec js2 = b.build();
Assert.assertEquals(js2.getUri().toString(), "test:job2");
Assert.assertEquals(js2.getVersion(), "2");
Assert.assertEquals(js2.getDescription(), "A test job");
Assert.assertEquals(js2.getConfig().getString("a1"), "a_value");
Assert.assertEquals(js2.getConfig().getLong("a2.b"), 1L);
Assert.assertEquals(js2.getConfig().getDouble("a2.c.d"), 12.34);
Assert.assertTrue(js2.getConfig().getBoolean("a2.c.d2"));
Config cfg =
ConfigFactory.empty()
.withValue("a1", ConfigValueFactory.fromAnyRef("some_string"))
.withValue("a2.b", ConfigValueFactory.fromAnyRef(-1))
.withValue("a2.c.d", ConfigValueFactory.fromAnyRef(1.2))
.withValue("a2.e.f", ConfigValueFactory.fromAnyRef(true));
b = new JobSpec.Builder("test:job")
.withVersion("3")
.withDescription("A test job")
.withConfig(cfg);
JobSpec js3 = b.build();
Assert.assertEquals(js3.getUri().toString(), "test:job");
Assert.assertEquals(js3.getVersion(), "3");
Assert.assertEquals(js3.getDescription(), "A test job");
Assert.assertEquals(js3.getConfigAsProperties().getProperty("a1"), "some_string");
Assert.assertEquals(js3.getConfigAsProperties().getProperty("a2.b"), "-1");
Assert.assertEquals(js3.getConfigAsProperties().getProperty("a2.c.d"), "1.2");
Assert.assertEquals(js3.getConfigAsProperties().getProperty("a2.e.f"), "true");
Config cfg2 =
ConfigFactory.empty()
.withValue(ConfigurationKeys.JOB_NAME_KEY, ConfigValueFactory.fromAnyRef("myJob"))
.withValue(ConfigurationKeys.JOB_GROUP_KEY, ConfigValueFactory.fromAnyRef("myGroup"))
.withValue(ConfigurationKeys.JOB_DESCRIPTION_KEY, ConfigValueFactory.fromAnyRef("Awesome job"));
b = new JobSpec.Builder().withConfig(cfg2);
JobSpec js4 = b.build();
Assert.assertEquals(js4.getUri(), new URI(JobSpec.Builder.DEFAULT_JOB_CATALOG_SCHEME +
":/myGroup/myJob"));
Assert.assertEquals(js4.getDescription(), "Awesome job");
b = new JobSpec.Builder().withConfig(cfg2).withJobCatalogURI("my-jobs:/");
JobSpec js5 = b.build();
Assert.assertEquals(js5.getUri(), new URI("my-jobs:/myGroup/myJob"));
}
@Test
public void testSerDe() {
JobSpec.Builder b = new JobSpec.Builder("test:job");
JobSpec js1 = b.build();
byte[] serializedBytes = SerializationUtils.serialize(js1);
JobSpec js1Deserialized = SerializationUtils.deserialize(serializedBytes);
Assert.assertEquals(js1Deserialized.getUri().toString(), js1.getUri().toString());
Assert.assertEquals(js1Deserialized.getVersion(), js1.getVersion());
Assert.assertNotNull(js1Deserialized.getDescription());
Assert.assertTrue(js1Deserialized.getDescription().contains(js1.getDescription()));
Assert.assertEquals(js1Deserialized.getConfig().entrySet().size(), 0);
Assert.assertEquals(js1Deserialized.getConfigAsProperties().size(), 0);
Properties props = new Properties();
props.put("a1", "a_value");
props.put("a2.b", "1");
props.put("a2.c.d", "12.34");
props.put("a2.c.d2", "true");
b = new JobSpec.Builder("test:job2")
.withVersion("2")
.withDescription("A test job")
.withConfigAsProperties(props);
JobSpec js2 = b.build();
serializedBytes = SerializationUtils.serialize(js2);
JobSpec js2Deserialized = SerializationUtils.deserialize(serializedBytes);
Assert.assertEquals(js2Deserialized.getUri().toString(), js2.getUri().toString());
Assert.assertEquals(js2Deserialized.getVersion(), js2.getVersion());
Assert.assertEquals(js2Deserialized.getDescription(), js2.getDescription());
Assert.assertEquals(js2Deserialized.getConfig().getString("a1"), "a_value");
Assert.assertEquals(js2Deserialized.getConfig().getLong("a2.b"), 1L);
Assert.assertEquals(js2Deserialized.getConfig().getDouble("a2.c.d"), 12.34);
Assert.assertTrue(js2Deserialized.getConfig().getBoolean("a2.c.d2"));
}
}