/*
* 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.ignite.internal.processors.igfs.split;
import org.apache.ignite.igfs.IgfsInputStream;
import org.apache.ignite.igfs.mapreduce.IgfsFileRange;
import org.apache.ignite.igfs.mapreduce.records.IgfsNewLineRecordResolver;
import org.apache.ignite.internal.util.typedef.F;
import static org.apache.ignite.igfs.mapreduce.records.IgfsNewLineRecordResolver.SYM_CR;
import static org.apache.ignite.igfs.mapreduce.records.IgfsNewLineRecordResolver.SYM_LF;
/**
* New line split resolver self test.
*/
public class IgfsNewLineDelimiterRecordResolverSelfTest extends IgfsAbstractRecordResolverSelfTest {
/**
* Test new line delimtier record resovler.
*
* @throws Exception If failed.
*/
public void test() throws Exception{
byte[] data = array(F.t(wrap(1), 8), F.t(wrap(SYM_LF), 1), F.t(wrap(1), 8), F.t(wrap(SYM_CR, SYM_LF), 1),
F.t(wrap(1), 8));
assertSplit(0, 4, 0, 9, data);
assertSplit(0, 9, 0, 9, data);
assertSplit(0, 13, 0, 19, data);
assertSplit(0, 19, 0, 19, data);
assertSplit(0, 23, 0, 27, data);
assertSplit(0, 27, 0, 27, data);
assertSplitNull(2, 2, data);
assertSplitNull(2, 7, data);
assertSplit(2, 11, 9, 10, data);
assertSplit(2, 17, 9, 10, data);
assertSplit(2, 21, 9, 18, data);
assertSplit(2, 25, 9, 18, data);
assertSplit(9, 4, 9, 10, data);
assertSplit(9, 10, 9, 10, data);
assertSplit(9, 14, 9, 18, data);
assertSplit(9, 18, 9, 18, data);
assertSplitNull(11, 2, data);
assertSplitNull(11, 8, data);
assertSplit(11, 12, 19, 8, data);
assertSplit(11, 16, 19, 8, data);
assertSplit(19, 4, 19, 8, data);
assertSplit(19, 8, 19, 8, data);
assertSplitNull(21, 2, data);
assertSplitNull(21, 6, data);
}
/**
* Check split resolution.
*
* @param suggestedStart Suggested start.
* @param suggestedLen Suggested length.
* @param expStart Expected start.
* @param expLen Expected length.
* @param data File data.
* @throws Exception If failed.
*/
public void assertSplit(long suggestedStart, long suggestedLen, long expStart, long expLen, byte[] data)
throws Exception {
write(data);
IgfsNewLineRecordResolver rslvr = resolver();
IgfsFileRange split;
try (IgfsInputStream is = read()) {
split = rslvr.resolveRecords(igfs, is, split(suggestedStart, suggestedLen));
}
assert split != null : "Split is null.";
assert split.start() == expStart : "Incorrect start [expected=" + expStart + ", actual=" + split.start() + ']';
assert split.length() == expLen : "Incorrect length [expected=" + expLen + ", actual=" + split.length() + ']';
}
/**
* Check the split resolution resulted in {@code null}.
*
* @param suggestedStart Suggested start.
* @param suggestedLen Suggested length.
* @param data File data.
* @throws Exception If failed.
*/
public void assertSplitNull(long suggestedStart, long suggestedLen, byte[] data)
throws Exception {
write(data);
IgfsNewLineRecordResolver rslvr = resolver();
IgfsFileRange split;
try (IgfsInputStream is = read()) {
split = rslvr.resolveRecords(igfs, is, split(suggestedStart, suggestedLen));
}
assert split == null : "Split is not null.";
}
/**
* Create resolver.
*
* @return Resolver.
*/
private IgfsNewLineRecordResolver resolver() {
return IgfsNewLineRecordResolver.NEW_LINE;
}
}