mirror of
https://github.com/ceph/go-ceph
synced 2024-12-22 22:24:03 +00:00
rados: add test cases for ReadOp type and functions
Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
parent
0a67ff8f5a
commit
c91f54ef25
144
rados/read_op_test.go
Normal file
144
rados/read_op_test.go
Normal file
@ -0,0 +1,144 @@
|
||||
package rados
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func (suite *RadosTestSuite) TestReadOpAssertExists() {
|
||||
suite.SetupConnection()
|
||||
oid := "TestReadOpAssertExists"
|
||||
|
||||
wrop := CreateWriteOp()
|
||||
defer wrop.Release()
|
||||
wrop.Create(CreateIdempotent)
|
||||
err := wrop.Operate(suite.ioctx, oid, OperationNoFlag)
|
||||
assert.NoError(suite.T(), err)
|
||||
|
||||
op := CreateReadOp()
|
||||
defer op.Release()
|
||||
op.AssertExists()
|
||||
err = op.Operate(suite.ioctx, oid, OperationNoFlag)
|
||||
assert.NoError(suite.T(), err)
|
||||
|
||||
op2 := CreateReadOp()
|
||||
defer op2.Release()
|
||||
op2.AssertExists()
|
||||
err = op2.Operate(suite.ioctx, oid+"junk", OperationNoFlag)
|
||||
assert.Error(suite.T(), err)
|
||||
|
||||
// ensure a nil ioctx triggers a panic
|
||||
assert.Panics(suite.T(), func() {
|
||||
op2.Operate(nil, "foo", OperationNoFlag)
|
||||
})
|
||||
}
|
||||
|
||||
func getAllMap(gos *GetOmapStep) map[string][]byte {
|
||||
r := make(map[string][]byte)
|
||||
for {
|
||||
kv, err := gos.Next()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if kv == nil {
|
||||
break
|
||||
}
|
||||
r[kv.Key] = kv.Value
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func (suite *RadosTestSuite) TestReadOpGetOmapValues() {
|
||||
suite.SetupConnection()
|
||||
ta := assert.New(suite.T())
|
||||
oid := "TestReadOpGetOmapValues"
|
||||
|
||||
wrop := CreateWriteOp()
|
||||
defer wrop.Release()
|
||||
wrop.Create(CreateIdempotent)
|
||||
wrop.SetOmap(map[string][]byte{
|
||||
"tos.captain": []byte("Kirk"),
|
||||
"tos.first-officer": []byte("Spock"),
|
||||
"tos.doctor": []byte("McCoy"),
|
||||
"tng.captain": []byte("Picard"),
|
||||
"tng.first-officer": []byte("Riker"),
|
||||
"tng.doctor": []byte("Crusher"),
|
||||
"random.value": []byte("foobar"),
|
||||
"no.value": []byte(""),
|
||||
})
|
||||
err := wrop.Operate(suite.ioctx, oid, OperationNoFlag)
|
||||
ta.NoError(err)
|
||||
|
||||
suite.T().Run("simple", func(t *testing.T) {
|
||||
ta := assert.New(t)
|
||||
op := CreateReadOp()
|
||||
defer op.Release()
|
||||
op.AssertExists()
|
||||
gos := op.GetOmapValues("", "", 16)
|
||||
err = op.Operate(suite.ioctx, oid, OperationNoFlag)
|
||||
ta.NoError(err)
|
||||
|
||||
omap := getAllMap(gos)
|
||||
ta.Len(omap, 8)
|
||||
ta.Contains(omap, "tos.captain")
|
||||
ta.Contains(omap, "tng.captain")
|
||||
ta.False(gos.More())
|
||||
})
|
||||
|
||||
suite.T().Run("twoIterations", func(t *testing.T) {
|
||||
// test two iterations over different subsets of omap keys
|
||||
ta := assert.New(t)
|
||||
op := CreateReadOp()
|
||||
defer op.Release()
|
||||
op.AssertExists()
|
||||
gos1 := op.GetOmapValues("", "tos", 16)
|
||||
gos2 := op.GetOmapValues("", "tng", 16)
|
||||
err = op.Operate(suite.ioctx, oid, OperationNoFlag)
|
||||
ta.NoError(err)
|
||||
|
||||
omap1 := getAllMap(gos1)
|
||||
ta.Len(omap1, 3)
|
||||
ta.Contains(omap1, "tos.captain")
|
||||
ta.Contains(omap1, "tos.first-officer")
|
||||
ta.Contains(omap1, "tos.doctor")
|
||||
omap2 := getAllMap(gos2)
|
||||
ta.Len(omap2, 3)
|
||||
ta.Contains(omap2, "tng.captain")
|
||||
ta.Contains(omap2, "tng.first-officer")
|
||||
ta.Contains(omap2, "tng.doctor")
|
||||
})
|
||||
|
||||
suite.T().Run("checkForMore", func(t *testing.T) {
|
||||
// test two iterations over different subsets of omap keys
|
||||
ta := assert.New(t)
|
||||
op := CreateReadOp()
|
||||
defer op.Release()
|
||||
op.AssertExists()
|
||||
gos := op.GetOmapValues("", "", 6)
|
||||
err = op.Operate(suite.ioctx, oid, OperationNoFlag)
|
||||
ta.NoError(err)
|
||||
|
||||
omap1 := getAllMap(gos)
|
||||
ta.Len(omap1, 6)
|
||||
ta.True(gos.More())
|
||||
})
|
||||
|
||||
suite.T().Run("iterateTooEarly", func(t *testing.T) {
|
||||
// test two iterations over different subsets of omap keys
|
||||
ta := assert.New(t)
|
||||
op := CreateReadOp()
|
||||
defer op.Release()
|
||||
op.AssertExists()
|
||||
gos := op.GetOmapValues("", "", 6)
|
||||
_, err := gos.Next()
|
||||
ta.Error(err)
|
||||
ta.Equal(ErrOperationIncomplete, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestReadOpInvalid(t *testing.T) {
|
||||
r := &ReadOp{}
|
||||
err := r.Operate(&IOContext{}, "foo", 0)
|
||||
assert.Error(t, err)
|
||||
}
|
Loading…
Reference in New Issue
Block a user