blob: c5c736fb74610cd320e3bd96247b9d523f9942af [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
*
* 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 client
import (
"reflect"
"testing"
"time"
"github.com/apache/iotdb-client-go/rpc"
)
func createIoTDBRpcDataSet() *IoTDBRpcDataSet {
columns := []string{"root.ln.device1.restart_count", "root.ln.device1.price", "root.ln.device1.tick_count", "root.ln.device1.temperature", "root.ln.device1.description", "root.ln.device1.status"}
dataTypes := []string{"INT32", "DOUBLE", "INT64", "FLOAT", "TEXT", "BOOLEAN"}
columnNameIndex := map[string]int32{
"root.ln.device1.restart_count": 2,
"root.ln.device1.price": 1,
"root.ln.device1.tick_count": 5,
"root.ln.device1.temperature": 4,
"root.ln.device1.description": 0,
"root.ln.device1.status": 3,
}
var queyrId int64 = 1
var sessionId int64 = 1
var client *rpc.TSIServiceClient = nil
queryDataSet := rpc.TSQueryDataSet{
Time: []byte{0, 0, 1, 118, 76, 52, 0, 236, 0, 0, 1, 118, 76, 52, 25, 228, 0, 0, 1, 118, 76, 52, 41, 42, 0, 0, 1, 118, 76, 52, 243, 148, 0, 0, 1, 118, 76, 95, 98, 255},
ValueList: [][]byte{{0, 0, 0, 13, 84, 101, 115, 116, 32, 68, 101, 118, 105, 99, 101, 32, 49, 0, 0, 0, 13, 84, 101, 115, 116, 32, 68, 101, 118, 105, 99, 101, 32, 49, 0, 0, 0, 13, 84, 101, 115, 116, 32, 68, 101, 118, 105, 99, 101, 32, 49, 0, 0, 0, 13, 84, 101, 115, 116, 32, 68, 101, 118, 105, 99, 101, 32, 49, 0, 0, 0, 13, 84, 101, 115, 116, 32, 68, 101, 118, 105, 99, 101, 32, 49}, {64, 159, 16, 204, 204, 204, 204, 205, 64, 159, 16, 204, 204, 204, 204, 205, 64, 159, 16, 204, 204, 204, 204, 205, 64, 159, 16, 204, 204, 204, 204, 205, 64, 159, 16, 204, 204, 204, 204, 205}, {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1}, {1, 1, 1, 1, 1}, {65, 65, 153, 154, 65, 65, 153, 154, 65, 65, 153, 154, 65, 65, 153, 154, 65, 65, 153, 154}, {0, 0, 0, 0, 0, 50, 220, 213, 0, 0, 0, 0, 0, 50, 220, 213, 0, 0, 0, 0, 0, 50, 220, 213, 0, 0, 0, 0, 0, 50, 220, 213, 0, 0, 0, 0, 0, 50, 220, 213}},
BitmapList: [][]byte{{248}, {248}, {248}, {248}, {248}, {248}},
}
return NewIoTDBRpcDataSet("select * from root.ln.device1", columns, dataTypes, columnNameIndex, queyrId, client, sessionId, &queryDataSet, false, DefaultFetchSize, 0)
}
func TestIoTDBRpcDataSet_getColumnType(t *testing.T) {
type args struct {
columnName string
}
ds := createIoTDBRpcDataSet()
closedDataSet := createIoTDBRpcDataSet()
closedDataSet.Close()
tests := []struct {
name string
dataSet *IoTDBRpcDataSet
args args
want TSDataType
}{
{
name: "Normal",
dataSet: ds,
args: args{
columnName: "root.ln.device1.tick_count",
},
want: INT64,
}, {
name: "Closed",
dataSet: closedDataSet,
args: args{
columnName: "root.ln.device1.tick_count",
},
want: UNKNOW,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := tt.dataSet
if got := s.getColumnType(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getColumnType() = %v, want %v", got, tt.want)
}
s.Close()
})
}
}
func TestIoTDBRpcDataSet_getColumnIndex(t *testing.T) {
type args struct {
columnName string
}
closedDataSet := createIoTDBRpcDataSet()
closedDataSet.Close()
tests := []struct {
name string
dataset *IoTDBRpcDataSet
args args
want int32
}{
{
name: "Normal",
dataset: createIoTDBRpcDataSet(),
args: args{
columnName: "root.ln.device1.tick_count",
},
want: 5,
}, {
name: "Closed",
dataset: closedDataSet,
args: args{
columnName: "root.ln.device1.tick_count",
},
want: -1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := tt.dataset
if got := s.getColumnIndex(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getColumnIndex() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_isNull(t *testing.T) {
type args struct {
columnIndex int
rowIndex int
}
ds := createIoTDBRpcDataSet()
ds.next()
tests := []struct {
name string
args args
want bool
}{
{
name: "Normal",
args: args{
columnIndex: 0,
rowIndex: 0,
},
want: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.isNull(tt.args.columnIndex, tt.args.rowIndex); got != tt.want {
t.Errorf("IoTDBRpcDataSet.isNull() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getValue(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want interface{}
}{
{
name: "restart_count",
args: args{
columnName: "root.ln.device1.restart_count",
},
want: int32(1),
}, {
name: "tick_count",
args: args{
columnName: "root.ln.device1.tick_count",
},
want: int64(3333333),
}, {
name: "price",
args: args{
columnName: "root.ln.device1.price",
},
want: float64(1988.2),
}, {
name: "temperature",
args: args{
columnName: "root.ln.device1.temperature",
},
want: float32(12.1),
}, {
name: "description",
args: args{
columnName: "root.ln.device1.description",
},
want: "Test Device 1",
}, {
name: "status",
args: args{
columnName: "root.ln.device1.status",
},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getValue(tt.args.columnName); !reflect.DeepEqual(got, tt.want) {
t.Errorf("IoTDBRpcDataSet.getValue() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_scan(t *testing.T) {
type args struct {
dest []interface{}
}
type want struct {
err error
values []interface{}
}
var restartCount int32
var price float64
var tickCount int64
var temperature float32
var description string
var status bool
var restartCountStr string
var priceStr string
var tickCountStr string
var temperatureStr string
var descriptionStr string
var statusStr string
var wantRestartCount int32 = 1
var wantPrice float64 = 1988.2
var wantTickCount int64 = 3333333
var wantTemperature float32 = 12.1
var wantDescription string = "Test Device 1"
var wantStatus bool = true
var wantRestartCountStr string = "1"
var wantPriceStr string = "1988.2"
var wantTickCountStr string = "3333333"
var wantTemperatureStr string = "12.1"
var wantDescriptionStr string = "Test Device 1"
var wantStatusStr string = "true"
tests := []struct {
name string
args args
want want
}{
{
name: "Normal",
args: args{
dest: []interface{}{&restartCount, &price, &tickCount, &temperature, &description, &status},
},
want: want{
err: nil,
values: []interface{}{&wantRestartCount, &wantPrice, &wantTickCount, &wantTemperature, &wantDescription, &wantStatus},
},
}, {
name: "String",
args: args{
dest: []interface{}{&restartCountStr, &priceStr, &tickCountStr, &temperatureStr, &descriptionStr, &statusStr},
},
want: want{
err: nil,
values: []interface{}{&wantRestartCountStr, &wantPriceStr, &wantTickCountStr, &wantTemperatureStr, &wantDescriptionStr, &wantStatusStr},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if err := s.scan(tt.args.dest...); err != tt.want.err {
t.Errorf("IoTDBRpcDataSet.scan() error = %v, wantErr %v", err, tt.want.err)
}
if got := tt.args.dest; !reflect.DeepEqual(got, tt.want.values) {
t.Errorf("IoTDBRpcDataSet.scan(), dest = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_GetTimestamp(t *testing.T) {
tests := []struct {
name string
want int64
}{
{
name: "GetTimestamp",
want: 1607596245228,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.GetTimestamp(); got != tt.want {
t.Errorf("IoTDBRpcDataSet.GetTimestamp() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getText(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want string
}{
{
name: "restart_count",
args: args{
columnName: "root.ln.device1.restart_count",
},
want: "1",
}, {
name: "price",
args: args{
columnName: "root.ln.device1.price",
},
want: "1988.2",
}, {
name: "tick_count",
args: args{
columnName: "root.ln.device1.tick_count",
},
want: "3333333",
}, {
name: "temperature",
args: args{
columnName: "root.ln.device1.temperature",
},
want: "12.1",
}, {
name: "description",
args: args{
columnName: "root.ln.device1.description",
},
want: "Test Device 1",
}, {
name: "status",
args: args{
columnName: "root.ln.device1.status",
},
want: "true",
}, {
name: TimestampColumnName,
args: args{
columnName: TimestampColumnName,
},
want: time.Unix(0, 1607596245228000000).Format(time.RFC3339),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getText(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getText() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getBool(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want bool
}{
{
name: "status",
args: args{
columnName: "root.ln.device1.status",
},
want: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getBool(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getBool() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getFloat(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want float32
}{
{
name: "temperature",
args: args{
columnName: "root.ln.device1.temperature",
},
want: 12.1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getFloat(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getFloat() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getDouble(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want float64
}{
{
name: "price",
args: args{
columnName: "root.ln.device1.price",
},
want: 1988.2,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getDouble(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getDouble() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getInt32(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want int32
}{
{
name: "restart_count",
args: args{
columnName: "root.ln.device1.restart_count",
},
want: 1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getInt32(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getInt32() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getInt64(t *testing.T) {
type args struct {
columnName string
}
tests := []struct {
name string
args args
want int64
}{
{
name: "tick_count",
args: args{
columnName: "root.ln.device1.tick_count",
},
want: 3333333,
}, {
name: TimestampColumnName,
args: args{
columnName: TimestampColumnName,
},
want: 1607596245228,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if got := s.getInt64(tt.args.columnName); got != tt.want {
t.Errorf("IoTDBRpcDataSet.getInt64() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_getRowRecord(t *testing.T) {
tests := []struct {
name string
want *RowRecord
wantErr bool
}{
{
name: "",
want: &RowRecord{
timestamp: 0,
fields: []*Field{
&Field{
name: "root.ln.device1.restart_count",
dataType: INT32,
value: int32(1),
}, &Field{
name: "root.ln.device1.price",
dataType: DOUBLE,
value: float64(1988.2),
}, &Field{
name: "root.ln.device1.tick_count",
dataType: INT64,
value: int64(3333333),
}, &Field{
name: "root.ln.device1.temperature",
dataType: FLOAT,
value: float32(12.1),
}, &Field{
name: "root.ln.device1.description",
dataType: TEXT,
value: string("Test Device 1"),
}, &Field{
name: "root.ln.device1.status",
dataType: BOOLEAN,
value: bool(true),
},
},
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
got, err := s.getRowRecord()
if (err != nil) != tt.wantErr {
t.Errorf("IoTDBRpcDataSet.getRowRecord() error = %v, wantErr %v", err, tt.wantErr)
return
}
match := true
for i := 0; i < len(got.fields); i++ {
gotField := got.fields[i]
wantField := tt.want.fields[i]
if gotField.dataType != wantField.dataType || gotField.name != wantField.name || gotField.value != wantField.value {
match = false
}
}
if !match {
t.Errorf("IoTDBRpcDataSet.getRowRecord() = %v, want %v", got, tt.want)
}
})
}
}
func TestIoTDBRpcDataSet_Close(t *testing.T) {
tests := []struct {
name string
wantErr bool
}{
{
name: "",
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
s := createIoTDBRpcDataSet()
s.next()
if err := s.Close(); (err != nil) != tt.wantErr {
t.Errorf("IoTDBRpcDataSet.Close() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}