X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=common%2FrNibPool_test.go;fp=common%2FrNibPool_test.go;h=0000000000000000000000000000000000000000;hb=63e943757e689470e70e0c27b8460420d52ea25c;hp=e3bffa5135231b376b52ec7daf3588e7dd60f6a8;hpb=8f2b8044005fd3b11801607e8bdce34ecaa6732c;p=ric-plt%2Fnodeb-rnib.git diff --git a/common/rNibPool_test.go b/common/rNibPool_test.go deleted file mode 100644 index e3bffa5..0000000 --- a/common/rNibPool_test.go +++ /dev/null @@ -1,239 +0,0 @@ -// -// Copyright 2019 AT&T Intellectual Property -// Copyright 2019 Nokia -// -// 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 common - -import ( - "github.com/stretchr/testify/assert" - "sync" - "sync/atomic" - "testing" - "time" -) - -var max int32 -var counter int32 -var poolGlob *Pool -type instance struct{} - -func(instance) up(){ - tmpc := atomic.AddInt32(&counter, 1) - swapped:= false - for !swapped { - tmpm := atomic.LoadInt32(&max) - if tmpc >tmpm { - swapped = atomic.CompareAndSwapInt32(&max, tmpm, tmpc) - } else { - break - } - } -} - -func(instance) down(){ - atomic.AddInt32(&counter, - 1) -} - -func TestPoolMax(t *testing.T){ - counter = 0 - max = 0 - validateMaxLimit(1, 1, t) - counter = 0 - max = 0 - validateMaxLimit(1, 2, t) - counter = 0 - max = 0 - validateMaxLimit(5, 10, t) -} - -func validateMaxLimit(size int, iterations int, t *testing.T) { - poolGlob = NewPool(size, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - group := sync.WaitGroup{} - for i := 0; i < iterations; i++ { - group.Add(1) - go func() { - getPutInstance() - group.Done() - }() - } - time.Sleep(time.Second) - group.Wait() - assert.Equal(t, int32(size), max) -} - -func getPutInstance() { - inst := poolGlob.Get().(instance) - inst.up() - time.Sleep(time.Millisecond*10) - inst.down() - poolGlob.Put(inst) -} - -func TestNewPool(t *testing.T){ - size := 5 - pool := NewPool(size, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - assert.NotNil(t, pool) - assert.NotNil(t, pool.New) - assert.NotNil(t, pool.Destroy) - assert.NotNil(t, pool.pool) - assert.Equal(t, cap(pool.pool), size, "the capacity of the pool should be " + string(size)) -} - -func TestGetCreated(t *testing.T) { - pool := NewPool(1, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - pool.Get() - available, created := pool.Stats() - assert.Equal(t, 0, available, "number of available objects in the pool should be 0") - assert.Equal(t, 1, created, "number of created objects in the pool should be 1") - pool.Close() -} - -func TestGetAndPut(t *testing.T) { - pool := NewPool(1, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - pool.Put(pool.Get()) - available, created := pool.Stats() - assert.Equal(t, 1, available, "number of available objects in the pool should be 1") - assert.Equal(t, 1, created, "number of created objects in the pool should be 1") - pool.Close() -} - -func TestPutOutOfCapacity(t *testing.T) { - pool := NewPool(1, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - pool.Put(pool.Get()) - pool.Put(new(instance)) - available, created := pool.Stats() - assert.Equal(t, 1, available, "number of available objects in the pool should be 1") - assert.Equal(t, 1, created, "number of created objects in the pool should be 1") - pool.Close() -} - -func TestNotInitializedPut(t *testing.T) { - var poolEmpty Pool - poolEmpty.Put(new(instance)) - available, created := poolEmpty.Stats() - assert.Equal(t, 0, available, "number of available objects in the pool should be 0") - assert.Equal(t, 0, created, "number of created objects in the pool should be 0") -} - -func TestPutNilObject(t *testing.T) { - var poolEmpty Pool - poolEmpty.Put(nil) - available, created := poolEmpty.Stats() - assert.Equal(t, 0, available, "number of available objects in the pool should be 0") - assert.Equal(t, 0, created, "number of created objects in the pool should be 0") -} - -func TestGet(t *testing.T) { - pool := NewPool(2, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - i1 := pool.Get() - i2 := pool.Get() - available, created := pool.Stats() - assert.Equal(t, 0, available, "number of available objects in the pool should be 0") - assert.Equal(t, 2, created, "number of created objects in the pool should be 2") - pool.Put(i1) - pool.Put(i2) - pool.Put(new(instance)) - available, created = pool.Stats() - assert.Equal(t, 2, available, "number of available objects in the pool should be 2") - assert.Equal(t, 2, created, "number of created objects in the pool should be 2") -} - -func TestClose(t *testing.T) { - pool := NewPool(3, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - i1 := pool.Get() - i2 := pool.Get() - i3 := pool.Get() - available, created := pool.Stats() - assert.Equal(t, 0, available, "number of available objects in the pool should be 0") - assert.Equal(t, 3, created, "number of created objects in the pool should be 3") - pool.Put(i1) - pool.Put(i2) - pool.Put(i3) - available, created = pool.Stats() - assert.Equal(t, 3, available, "number of available objects in the pool should be 3") - assert.Equal(t, 3, created, "number of created objects in the pool should be 3") - pool.Close() - i := pool.Get() - assert.Nil(t, i) - available, created = pool.Stats() - assert.Equal(t, 0, available, "number of available objects in the pool should be 0") - assert.Equal(t, 0, created, "number of created objects in the pool should be 0") -} - -func TestPoolPutPanicsOnClosedChannel(t *testing.T){ - pool := NewPool(1, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - close(pool.pool) - assert.Panics(t, func(){pool.Put(instance{})}) -} - -func TestPoolClosePanicsOnClosedChannel(t *testing.T) { - pool := NewPool(1, func() interface{} { - inst := instance{} - return inst - }, - func(obj interface{}) { - }, - ) - close(pool.pool) - assert.Panics(t, func(){pool.Close()}) -}