blob: 88e3ced2c0c991d422f96ccfae6443ded7d5d897 [file] [log] [blame]
/**
* 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
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* 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.ambari.view.hive2.resources.upload;
import org.apache.ambari.view.hive2.client.ColumnDescription;
import org.apache.ambari.view.hive2.client.Row;
import org.apache.ambari.view.hive2.resources.uploads.ColumnDescriptionImpl;
import org.apache.ambari.view.hive2.resources.uploads.TableDataReader;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TableDataReaderTest {
private class RowIter implements Iterator<Row> {
int numberOfRows;
int numberOfCols;
int index = 0 ;
ArrayList<Row> rows = new ArrayList<Row>();
public RowIter(int numberOfRows, int numberOfCols){
this.numberOfRows = numberOfRows;
this.numberOfCols = numberOfCols;
int x = 0 ;
for(int i = 0; i < this.numberOfRows; i++ ){
Object [] objArray = new Object[10];
for(int j = 0; j < this.numberOfCols; j++ ){
objArray[j] = x++ + "" ;
}
Row row = new Row(objArray);
rows.add(row);
}
}
@Override
public boolean hasNext() {
return index < numberOfRows;
}
@Override
public Row next() {
return rows.get(index++);
}
@Override
public void remove() {
throw new RuntimeException("Operation not supported.");
}
@Override
public String toString() {
return "RowIter{" +
"index=" + index +
", rows=" + rows +
'}';
}
}
@Test
public void testCSVReader() throws IOException {
RowIter rowIter = new RowIter(10,10);
List<ColumnDescriptionImpl> colDescs = new LinkedList<>();
for(int i = 0 ; i < 10 ; i++ ) {
ColumnDescriptionImpl cd = new ColumnDescriptionImpl("col" + (i+1) , ColumnDescription.DataTypes.STRING.toString(), i);
colDescs.add(cd);
}
TableDataReader tableDataReader = new TableDataReader(rowIter, colDescs, false);
char del = TableDataReader.CSV_DELIMITER;
char[] first10 = {'0', del, '1', del, '2', del, '3', del, '4', del};
char [] buf = new char[10];
tableDataReader.read(buf,0,10);
Assert.assertArrayEquals(first10,buf);
char[] next11 = {'5', del, '6', del, '7', del, '8', del, '9', '\n', '1'}; //"5,6,7,8,9\n1".toCharArray();
char [] buf1 = new char[11];
tableDataReader.read(buf1,0,11);
Assert.assertArrayEquals(next11,buf1);
// read it fully
while( tableDataReader.read(buf,0,10) != -1 );
char [] last10 = {'9', '7', del, '9', '8', del, '9', '9', '\n', del}; //"97,98,99\n,".toCharArray(); // last comma is the left over of previous read.
Assert.assertArrayEquals(last10,buf);
}
@Test
public void testEmptyCSVReader() throws IOException {
RowIter rowIter = new RowIter(0,0);
TableDataReader tableDataReader = new TableDataReader(rowIter, null, false);
char[] first10 = new char [10];
char [] buf = new char[10];
for( int i = 0 ; i < 10 ; i++ ){
first10[i] = '\0';
buf[i] = '\0';
}
tableDataReader.read(buf,0,10);
Assert.assertArrayEquals(first10,buf);
}
}