/
test_factory.go
102 lines (90 loc) · 2.84 KB
/
test_factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// Copyright (c) 2017-2018 Uber Technologies, Inc.
//
// 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 list
import (
memCom "github.com/uber/aresdb/memstore/common"
"github.com/uber/aresdb/memstore/tests"
"github.com/uber/aresdb/utils"
"sync"
)
var (
testFactory = TestFactoryT{
TestFactoryBase: tests.TestFactoryBase{
RootPath: "../../testing/data",
FileSystem: utils.OSFileSystem{},
ToArchiveVectorParty: ToArrayArchiveVectorParty,
ToLiveVectorParty: ToArrayLiveVectorParty,
ToVectorParty: ToArrayVectorParty,
},
}
)
// TestFactoryT creates test objects from text file
type TestFactoryT struct {
tests.TestFactoryBase
}
func GetFactory() TestFactoryT {
return testFactory
}
func ToArrayArchiveVectorParty(vp memCom.VectorParty, locker sync.Locker) memCom.ArchiveVectorParty {
return vp.(memCom.ArchiveVectorParty)
}
func ToArrayLiveVectorParty(vp memCom.VectorParty) memCom.LiveVectorParty {
return vp.(memCom.LiveVectorParty)
}
func ToArrayVectorParty(rvp *tests.RawVectorParty, forLiveVP bool) (vp memCom.VectorParty, err error) {
dataType := memCom.DataTypeFromString(rvp.DataType)
if dataType == memCom.Unknown {
return nil, utils.StackError(nil,
"Unknown DataType when reading vector from file",
)
}
if len(rvp.Values) != 0 && len(rvp.Values) != rvp.Length {
return nil, utils.StackError(nil,
"List values length %d is not as expected %d",
len(rvp.Values),
rvp.Length,
)
}
// array live party
if forLiveVP {
vp = NewLiveVectorParty(rvp.Length, dataType, nil)
vp.Allocate(false)
for i, row := range rvp.Values {
val, err := memCom.ValueFromString(row, dataType)
if err != nil {
return nil, err
}
vp.SetDataValue(i, val, memCom.IgnoreCount)
}
return vp, nil
}
// array archive party
var totalBytes int64
values := make([]memCom.DataValue, rvp.Length)
for i, row := range rvp.Values {
if values[i], err = memCom.ValueFromString(row, dataType); err != nil {
return nil, err
}
if values[i].Valid {
reader := memCom.NewArrayValueReader(dataType, values[i].OtherVal)
totalBytes += int64(memCom.CalculateListElementBytes(dataType, reader.GetLength()))
}
}
vp = NewArchiveVectorParty(rvp.Length, dataType, totalBytes, &sync.RWMutex{})
vp.Allocate(false)
for i, val := range values {
vp.SetDataValue(i, val, memCom.IgnoreCount)
}
return
}