2021-04-21 18:41:37 +08:00
|
|
|
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
|
|
|
//
|
|
|
|
// 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 datanode
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestAllocator_Basic(t *testing.T) {
|
|
|
|
ms := &MasterServiceFactory{}
|
|
|
|
allocator := newAllocator(ms)
|
|
|
|
|
|
|
|
t.Run("Test allocID", func(t *testing.T) {
|
2021-06-15 19:11:55 +08:00
|
|
|
ms.setID(666)
|
2021-04-21 18:41:37 +08:00
|
|
|
_, err := allocator.allocID()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
})
|
2021-06-15 19:11:55 +08:00
|
|
|
|
|
|
|
t.Run("Test genKey", func(t *testing.T) {
|
|
|
|
ms.setID(666)
|
|
|
|
|
|
|
|
type in struct {
|
|
|
|
isalloc bool
|
|
|
|
ids []UniqueID
|
|
|
|
}
|
|
|
|
|
|
|
|
type out struct {
|
|
|
|
key string
|
|
|
|
err error
|
|
|
|
}
|
|
|
|
|
|
|
|
type Test struct {
|
|
|
|
in
|
|
|
|
out
|
|
|
|
}
|
|
|
|
|
|
|
|
tests := []Test{
|
|
|
|
{in{true, []UniqueID{}}, out{"666", nil}},
|
|
|
|
{in{true, []UniqueID{1}}, out{"1/666", nil}},
|
|
|
|
{in{true, make([]UniqueID, 0)}, out{"666", nil}},
|
|
|
|
{in{false, []UniqueID{}}, out{"", nil}},
|
|
|
|
{in{false, []UniqueID{1, 2, 3}}, out{"1/2/3", nil}},
|
|
|
|
{in{false, []UniqueID{1}}, out{"1", nil}},
|
|
|
|
{in{false, []UniqueID{2, 2, 2}}, out{"2/2/2", nil}},
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, test := range tests {
|
|
|
|
key, err := allocator.genKey(test.in.isalloc, test.in.ids...)
|
|
|
|
|
|
|
|
assert.Equalf(t, test.out.key, key, "#%d", i)
|
|
|
|
assert.Equalf(t, test.out.err, err, "#%d", i)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Status.ErrorCode != Success
|
|
|
|
ms.setID(0)
|
|
|
|
tests = []Test{
|
|
|
|
{in{true, []UniqueID{}}, out{}},
|
|
|
|
{in{true, []UniqueID{1}}, out{}},
|
|
|
|
{in{true, make([]UniqueID, 0)}, out{}},
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, test := range tests {
|
|
|
|
_, err := allocator.genKey(test.in.isalloc, test.in.ids...)
|
|
|
|
assert.Errorf(t, err, "number: %d", i)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Grpc error
|
|
|
|
ms.setID(-1)
|
|
|
|
tests = []Test{
|
|
|
|
{in{true, make([]UniqueID, 0)}, out{}},
|
|
|
|
{in{true, []UniqueID{1}}, out{}},
|
|
|
|
{in{true, make([]UniqueID, 0)}, out{}},
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, test := range tests {
|
|
|
|
_, err := allocator.genKey(test.in.isalloc, test.in.ids...)
|
|
|
|
assert.Errorf(t, err, "number: %d", i)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MasterService's unavailability doesn't affects genKey when alloc == false
|
|
|
|
tests = []Test{
|
|
|
|
{in{false, []UniqueID{1, 2, 3}}, out{"1/2/3", nil}},
|
|
|
|
{in{false, []UniqueID{1}}, out{"1", nil}},
|
|
|
|
{in{false, []UniqueID{2, 2, 2}}, out{"2/2/2", nil}},
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, test := range tests {
|
|
|
|
key, err := allocator.genKey(test.in.isalloc, test.in.ids...)
|
|
|
|
assert.Equalf(t, test.out.key, key, "#%d", i)
|
|
|
|
assert.Equalf(t, test.out.err, err, "#%d", i)
|
|
|
|
}
|
|
|
|
})
|
2021-04-21 18:41:37 +08:00
|
|
|
}
|