/**
* 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 org.apache.sqoop.model;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.sqoop.common.Direction;
import org.testng.annotations.Test;
public class TestMConnector {
private MConnector createConnector(List<Direction> supportedDirections) {
List<MConfig> configs = new ArrayList<MConfig>();
MIntegerInput inputs = new MIntegerInput("INTEGER-INPUT", false, InputEditable.ANY, StringUtils.EMPTY);
inputs.setValue(100);
MStringInput strInput = new MStringInput("STRING-INPUT",false, InputEditable.ANY, StringUtils.EMPTY, (short)20);
strInput.setValue("TEST-VALUE");
List<MInput<?>> list = new ArrayList<MInput<?>>();
list.add(inputs);
list.add(strInput);
MConfig config = new MConfig("CONFIGNAME", list);
configs.add(config);
MLinkConfig linkConfig = new MLinkConfig(configs);
MFromConfig fromConfig = null;
MToConfig toConfig = null;
if (supportedDirections.contains(Direction.FROM)) {
fromConfig = new MFromConfig(configs);
}
if (supportedDirections.contains(Direction.TO)) {
toConfig = new MToConfig(configs);
}
return new MConnector("NAME", "CLASSNAME", "1.0",
linkConfig, fromConfig, toConfig);
}
/**
* Test for initialization
*/
@Test
public void testInitialization() {
List<MConfig> fromJobConfig = new ArrayList<MConfig>();
List<MConfig> toJobConfig = new ArrayList<MConfig>();
MLinkConfig linkConfig = new MLinkConfig(fromJobConfig);
MFromConfig fromConfig1 = new MFromConfig(fromJobConfig);
MToConfig toConfig1 = new MToConfig(toJobConfig);
MConnector connector1 = new MConnector("NAME", "CLASSNAME", "1.0",
linkConfig, fromConfig1, toConfig1);
assertEquals("NAME", connector1.getUniqueName());
assertEquals("CLASSNAME", connector1.getClassName());
assertEquals("1.0", connector1.getVersion());
MConnector connector2 = new MConnector("NAME", "CLASSNAME", "1.0",
linkConfig, fromConfig1, toConfig1);
assertEquals(connector2, connector1);
MConnector connector3 = new MConnector("NAME1", "CLASSNAME", "2.0",
linkConfig, fromConfig1, toConfig1);
assertFalse(connector1.equals(connector3));
try {
connector1 = new MConnector(null, "CLASSNAME", "1.0", linkConfig,
fromConfig1, toConfig1); // Expecting null pointer exception
} catch (NullPointerException e) {
assertTrue(true);
}
try {
connector1 = new MConnector("NAME", null, "1.0", linkConfig,
fromConfig1, toConfig1); // Expecting null pointer exception
} catch (NullPointerException e) {
assertTrue(true);
}
}
@Test
public void testClone() {
MConnector connector = createConnector(Arrays.asList(Direction.FROM, Direction.TO));
assertEquals("NAME", connector.getUniqueName());
assertEquals("CLASSNAME", connector.getClassName());
assertEquals("1.0", connector.getVersion());
//Clone with values. Checking values copying after the cloning. But config values will be null
MConnector cloneConnector1 = connector.clone(true);
assertEquals("NAME", cloneConnector1.getUniqueName());
assertEquals("CLASSNAME", cloneConnector1.getClassName());
assertEquals("1.0", cloneConnector1.getVersion());
MConfig clonedLinkConfig = cloneConnector1.getLinkConfig().getConfigs().get(0);
assertNull(clonedLinkConfig.getInputs().get(0).getValue());
assertNull(clonedLinkConfig.getInputs().get(1).getValue());
MConfig clonedFromConfig = cloneConnector1.getConfig(Direction.FROM).getConfigs().get(0);
assertNull(clonedFromConfig.getInputs().get(0).getValue());
assertNull(clonedFromConfig.getInputs().get(1).getValue());
MConfig clonedToConfig = cloneConnector1.getConfig(Direction.TO).getConfigs().get(0);
assertNull(clonedToConfig.getInputs().get(0).getValue());
assertNull(clonedToConfig.getInputs().get(1).getValue());
//Clone without values. Inputs value will be null after cloning.
MConnector clonedConnector2 = connector.clone(false);
clonedLinkConfig = clonedConnector2.getLinkConfig().getConfigs().get(0);
assertNull(clonedLinkConfig.getInputs().get(0).getValue());
assertNull(clonedLinkConfig.getInputs().get(1).getValue());
clonedFromConfig = clonedConnector2.getConfig(Direction.FROM).getConfigs().get(0);
assertNull(clonedFromConfig.getInputs().get(0).getValue());
assertNull(clonedFromConfig.getInputs().get(1).getValue());
clonedToConfig = clonedConnector2.getConfig(Direction.TO).getConfigs().get(0);
assertNull(clonedToConfig.getInputs().get(0).getValue());
assertNull(clonedToConfig.getInputs().get(1).getValue());
}
@Test
public void testFromDirection() {
MConnector connector = createConnector(Arrays.asList(Direction.FROM));
// Clone should clone only one job config.
MConnector clone = connector.clone(true);
assertNotNull(clone.getFromConfig());
assertNull(clone.getToConfig());
assertEquals(connector, clone);
assertEquals(connector.toString(), clone.toString());
assertNotEquals(connector.hashCode(), clone.hashCode());
}
@Test
public void testToDirection() {
MConnector connector = createConnector(Arrays.asList(Direction.TO));
// Clone should clone only one job config.
MConnector clone = connector.clone(true);
assertNull(clone.getFromConfig());
assertNotNull(clone.getToConfig());
assertEquals(connector, clone);
assertEquals(connector.toString(), clone.toString());
assertNotEquals(connector.hashCode(), clone.hashCode());
}
@Test
public void testNoDirection() {
MConnector connector = createConnector(Arrays.asList(new Direction[0]));
// Clone should clone only one job config.
MConnector clone = connector.clone(true);
assertNull(clone.getFromConfig());
assertNull(clone.getToConfig());
assertEquals(connector, clone);
assertEquals(connector.toString(), clone.toString());
assertNotEquals(connector.hashCode(), clone.hashCode());
}
@Test
public void testBothDirections() {
MConnector connector = createConnector(Arrays.asList(Direction.FROM, Direction.TO));
// Clone should clone only one job config.
MConnector clone = connector.clone(true);
assertNotNull(clone.getFromConfig());
assertNotNull(clone.getToConfig());
assertEquals(connector, clone);
assertEquals(connector.toString(), clone.toString());
assertNotEquals(connector.hashCode(), clone.hashCode());
}
@Test
public void testGetSupportedDirections() {
MConnector connector = createConnector(Arrays.asList(Direction.FROM, Direction.TO));
assertTrue(connector.getSupportedDirections().isDirectionSupported(Direction.FROM));
assertTrue(connector.getSupportedDirections().isDirectionSupported(Direction.TO));
connector = createConnector(Arrays.asList(Direction.FROM));
assertTrue(connector.getSupportedDirections().isDirectionSupported(Direction.FROM));
assertFalse(connector.getSupportedDirections().isDirectionSupported(Direction.TO));
connector = createConnector(Arrays.asList(Direction.TO));
assertFalse(connector.getSupportedDirections().isDirectionSupported(Direction.FROM));
assertTrue(connector.getSupportedDirections().isDirectionSupported(Direction.TO));
connector = createConnector(Arrays.asList(new Direction[]{}));
assertFalse(connector.getSupportedDirections().isDirectionSupported(Direction.FROM));
assertFalse(connector.getSupportedDirections().isDirectionSupported(Direction.TO));
}
}