/***********************************************************************************************************************
* Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
*
* 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 eu.stratosphere.test.recordJobTests;
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import org.junit.Assert;
import eu.stratosphere.api.common.Plan;
import eu.stratosphere.test.recordJobs.sort.TeraSort;
import eu.stratosphere.test.util.RecordAPITestBase;
public class TeraSortITCase extends RecordAPITestBase {
private static final String INPUT_DATA_FILE = "/testdata/terainput.txt";
private String resultPath;
@Override
protected void preSubmit() throws Exception {
resultPath = getTempDirPath("result");
}
@Override
protected Plan getTestJob() {
String testDataPath = getClass().getResource(INPUT_DATA_FILE).toString();
TeraSort ts = new TeraSort();
return ts.getPlan("4", testDataPath, resultPath);
}
@Override
protected void postSubmit() throws Exception {
final byte[] line = new byte[100];
final byte[] previous = new byte[10];
for (int i = 0; i < previous.length; i++) {
previous[i] = -128;
}
File parent = new File(new URI(resultPath).getPath());
int num = 1;
while (true) {
File next = new File(parent, String.valueOf(num));
if (!next.exists()) {
break;
}
FileInputStream inStream = new FileInputStream(next);
int read;
while ((read = inStream.read(line)) == 100) {
// check against the previous
for (int i = 0; i < previous.length; i++) {
if (line[i] > previous[i]) {
break;
} else if (line[i] < previous[i]) {
Assert.fail("Next record is smaller than previous record.");
}
}
System.arraycopy(line, 0, previous, 0, 10);
}
if (read != -1) {
Assert.fail("Inclomplete last record in result file.");
}
inStream.close();
num++;
}
if (num == 1) {
Assert.fail("Empty result, nothing checked for Job!");
}
}
}