mirror of https://github.com/k3s-io/k3s
227 lines
4.7 KiB
Go
227 lines
4.7 KiB
Go
/*
|
|
Copyright 2016 The Kubernetes Authors.
|
|
|
|
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 glusterfs
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestNewFree(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
if f := m.Free(); f != (max - min + 1) {
|
|
t.Errorf("expect to get %d free, but got %d", (max - min + 1), f)
|
|
}
|
|
}
|
|
|
|
func TestNewInvalidRange(t *testing.T) {
|
|
if _, err := NewMinMaxAllocator(10, 1); err != ErrInvalidRange {
|
|
t.Errorf("expect to get Error '%v', got '%v'", ErrInvalidRange, err)
|
|
}
|
|
}
|
|
|
|
func TestSetRange(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
if err = m.SetRange(10, 1); err != ErrInvalidRange {
|
|
t.Errorf("expected to get error '%v', got '%v'", ErrInvalidRange, err)
|
|
}
|
|
|
|
if err = m.SetRange(1, 2); err != nil {
|
|
t.Errorf("error setting range: '%v'", err)
|
|
}
|
|
|
|
if f := m.Free(); f != 2 {
|
|
t.Errorf("expect to get %d free, but got %d", 2, f)
|
|
}
|
|
|
|
if ok, _ := m.Allocate(1); !ok {
|
|
t.Errorf("error allocate offset %v", 1)
|
|
}
|
|
|
|
if f := m.Free(); f != 1 {
|
|
t.Errorf("expect to get 1 free, but got %d", f)
|
|
}
|
|
|
|
if err = m.SetRange(1, 1); err != nil {
|
|
t.Errorf("error setting range: '%v'", err)
|
|
}
|
|
|
|
if f := m.Free(); f != 0 {
|
|
t.Errorf("expect to get 0 free, but got %d", f)
|
|
}
|
|
|
|
if err = m.SetRange(2, 2); err != nil {
|
|
t.Errorf("error setting range: '%v'", err)
|
|
}
|
|
|
|
if f := m.Free(); f != 1 {
|
|
t.Errorf("expect to get 1 free, but got %d", f)
|
|
}
|
|
}
|
|
|
|
func TestAllocateNext(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
el, ok, _ := m.AllocateNext()
|
|
if !ok {
|
|
t.Fatalf("unexpected error")
|
|
}
|
|
|
|
if !m.Has(el) {
|
|
t.Errorf("expect element %v allocated", el)
|
|
}
|
|
|
|
if f := m.Free(); f != (max-min+1)-1 {
|
|
t.Errorf("expect to get %d free, but got %d", (max-min+1)-1, f)
|
|
}
|
|
}
|
|
|
|
func TestAllocateMax(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
for i := 1; i <= max; i++ {
|
|
if _, ok, _ := m.AllocateNext(); !ok {
|
|
t.Fatalf("unexpected error")
|
|
}
|
|
}
|
|
|
|
if _, ok, _ := m.AllocateNext(); ok {
|
|
t.Errorf("unexpected success")
|
|
}
|
|
|
|
if f := m.Free(); f != 0 {
|
|
t.Errorf("expect to get %d free, but got %d", 0, f)
|
|
}
|
|
}
|
|
|
|
func TestAllocate(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
offset := 3
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
if ok, err := m.Allocate(offset); !ok {
|
|
t.Errorf("error allocate offset %v: %v", offset, err)
|
|
}
|
|
|
|
if !m.Has(offset) {
|
|
t.Errorf("expect element %v allocated", offset)
|
|
}
|
|
|
|
if f := m.Free(); f != (max-min+1)-1 {
|
|
t.Errorf("expect to get %d free, but got %d", (max-min+1)-1, f)
|
|
}
|
|
}
|
|
|
|
func TestAllocateConflict(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
offset := 3
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
if ok, err := m.Allocate(offset); !ok {
|
|
t.Errorf("error allocate offset %v: %v", offset, err)
|
|
}
|
|
|
|
ok, err := m.Allocate(offset)
|
|
if ok {
|
|
t.Errorf("unexpected success")
|
|
}
|
|
if err != ErrConflict {
|
|
t.Errorf("expected error '%v', got '%v'", ErrConflict, err)
|
|
}
|
|
}
|
|
|
|
func TestAllocateOutOfRange(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
offset := 11
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
ok, err := m.Allocate(offset)
|
|
if ok {
|
|
t.Errorf("unexpected success")
|
|
}
|
|
if err != ErrOutOfRange {
|
|
t.Errorf("expected error '%v', got '%v'", ErrOutOfRange, err)
|
|
}
|
|
}
|
|
|
|
func TestRelease(t *testing.T) {
|
|
min := 1
|
|
max := 10
|
|
offset := 3
|
|
|
|
m, err := NewMinMaxAllocator(min, max)
|
|
if err != nil {
|
|
t.Errorf("error creating new allocator: '%v'", err)
|
|
}
|
|
|
|
if ok, err := m.Allocate(offset); !ok {
|
|
t.Errorf("error allocate offset %v: %v", offset, err)
|
|
}
|
|
|
|
if !m.Has(offset) {
|
|
t.Errorf("expect offset %v allocated", offset)
|
|
}
|
|
|
|
if err = m.Release(offset); err != nil {
|
|
t.Errorf("unexpected error: %v", err)
|
|
}
|
|
|
|
if m.Has(offset) {
|
|
t.Errorf("expect offset %v not allocated", offset)
|
|
}
|
|
}
|