mirror of https://github.com/ceph/go-ceph
rados: add test cases for basic operation types
Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
parent
53d2d83bc4
commit
c96da54878
|
@ -0,0 +1,119 @@
|
||||||
|
package rados
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestOperationError(t *testing.T) {
|
||||||
|
oe := OperationError{
|
||||||
|
kind: readOp,
|
||||||
|
OpError: fmt.Errorf("bad mojo %v", 77),
|
||||||
|
StepErrors: map[int]error{
|
||||||
|
1: fmt.Errorf("limit exceeded"),
|
||||||
|
3: fmt.Errorf("weirdness"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
assert.Error(t, oe)
|
||||||
|
estr := oe.Error()
|
||||||
|
assert.Contains(t, estr, "read operation error")
|
||||||
|
assert.Contains(t, estr, "op=bad mojo 77")
|
||||||
|
assert.Contains(t, estr, "Step#1=limit exceeded")
|
||||||
|
assert.Contains(t, estr, "Step#3=weirdness")
|
||||||
|
|
||||||
|
oe = OperationError{
|
||||||
|
kind: writeOp,
|
||||||
|
StepErrors: map[int]error{
|
||||||
|
0: fmt.Errorf("unlucky"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
assert.Error(t, oe)
|
||||||
|
estr = oe.Error()
|
||||||
|
assert.Contains(t, estr, "write operation error")
|
||||||
|
assert.NotContains(t, estr, "op=")
|
||||||
|
assert.Contains(t, estr, "Step#0=unlucky")
|
||||||
|
}
|
||||||
|
|
||||||
|
type fooStep struct {
|
||||||
|
updateCount int
|
||||||
|
freeCount int
|
||||||
|
failMe error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fs *fooStep) update() error {
|
||||||
|
fs.updateCount++
|
||||||
|
return fs.failMe
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fs *fooStep) free() {
|
||||||
|
fs.freeCount++
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOpStepFinalizer(t *testing.T) {
|
||||||
|
// this confirms that given a valid op step the finalizer helper
|
||||||
|
// function calls the free method of the interface
|
||||||
|
fs := &fooStep{}
|
||||||
|
opStepFinalizer(fs)
|
||||||
|
opStepFinalizer(fs)
|
||||||
|
assert.Equal(t, 2, fs.freeCount)
|
||||||
|
|
||||||
|
// this should not panic
|
||||||
|
opStepFinalizer(nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOperationType(t *testing.T) {
|
||||||
|
t.Run("stepErrors", func(t *testing.T) {
|
||||||
|
o := &operation{}
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{failMe: fmt.Errorf("yow")})
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{failMe: fmt.Errorf("ouch")})
|
||||||
|
|
||||||
|
err := o.update(readOp, 0)
|
||||||
|
if assert.Error(t, err) {
|
||||||
|
oe := err.(OperationError)
|
||||||
|
assert.NoError(t, oe.OpError)
|
||||||
|
assert.Len(t, oe.StepErrors, 2)
|
||||||
|
assert.Contains(t, oe.StepErrors, 1)
|
||||||
|
assert.Contains(t, oe.StepErrors, 4)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("opError", func(t *testing.T) {
|
||||||
|
o := &operation{}
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
|
||||||
|
err := o.update(readOp, 5)
|
||||||
|
if assert.Error(t, err) {
|
||||||
|
oe := err.(OperationError)
|
||||||
|
assert.Error(t, oe.OpError)
|
||||||
|
assert.Len(t, oe.StepErrors, 0)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("noErrors", func(t *testing.T) {
|
||||||
|
o := &operation{}
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
o.steps = append(o.steps, &fooStep{})
|
||||||
|
err := o.update(readOp, 0)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
x := 0
|
||||||
|
for i := range o.steps {
|
||||||
|
x += o.steps[i].(*fooStep).updateCount
|
||||||
|
}
|
||||||
|
assert.Equal(t, 2, x)
|
||||||
|
|
||||||
|
o.free()
|
||||||
|
x = 0
|
||||||
|
for i := range o.steps {
|
||||||
|
x += o.steps[i].(*fooStep).updateCount
|
||||||
|
}
|
||||||
|
assert.Equal(t, 2, x)
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue