| /** |
| * 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); |
| } |
| } |