/*
* Copyright 2014 the original author or authors.
*
* Licensed 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.springframework.xd.shell.command;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.hadoop.test.context.HadoopDelegatingSmartContextLoader;
import org.springframework.data.hadoop.test.context.MiniHadoopCluster;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.xd.shell.util.Table;
import org.springframework.xd.shell.util.TestFtpServer;
import org.springframework.xd.test.HostNotWindowsRule;
/**
*
* @author Gary Russell
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = HadoopDelegatingSmartContextLoader.class, classes = AbstractJobCommandsWithHadoopTests.EmptyConfig.class)
@MiniHadoopCluster
public class AbstractJobCommandsWithHadoopTests extends AbstractJobIntegrationTest {
@ClassRule
public static HostNotWindowsRule hostNotWindowsRule = new HostNotWindowsRule();
private static final Logger logger = LoggerFactory.getLogger(AbstractJobCommandsWithHadoopTests.class);
@Autowired
org.apache.hadoop.conf.Configuration configuration;
@Test
public void testLaunchFtpHadoopJob() throws Throwable {
logger.info("Launch FTP->HDFS batch job");
TestFtpServer server = new TestFtpServer("FtpHadoop");
server.before();
// clean up from old tests
FileSystem fs = FileSystem.get(configuration);
Path p1 = new Path("foo/ftpSource/ftpSource1.txt");
fs.delete(p1, true);
Path p2 = new Path("foo/ftpSource/ftpSource2.txt");
fs.delete(p2, true);
assertFalse(fs.exists(p1));
assertFalse(fs.exists(p2));
try {
int port = server.getPort();
executeJobCreate("myftphdfs", "ftphdfs --partitionResultsTimeout=120000 --port=" + port + " --fsUri="
+ fs.getUri().toString());
checkForJobInList("myftphdfs", "ftphdfs --partitionResultsTimeout=120000 --port=" + port + " --fsUri="
+ fs.getUri().toString(), true);
executeJobLaunch("myftphdfs", "{\"-remoteDirectory\":\"ftpSource\",\"hdfsDirectory\":\"foo\"}");
Table jobExecutions = listJobExecutions();
int n = 0;
while (!"COMPLETED".equals(jobExecutions.getRows().get(0).getValue(5))) {
Thread.sleep(100);
assertTrue(n++ < 100);
jobExecutions = listJobExecutions();
}
assertTrue(fs.exists(p1));
assertTrue(fs.exists(p2));
FSDataInputStream stream = fs.open(p1);
byte[] out = new byte[7];
stream.readFully(out);
stream.close();
assertEquals("source1", new String(out));
stream = fs.open(p2);
stream.readFully(out);
stream.close();
assertEquals("source2", new String(out));
}
finally {
server.after();
}
}
@Configuration
public static class EmptyConfig {
}
}