go-ceph/rados/command_test.go
John Mulligan 5985d410ce rados: merge test case into standard tests file, removing luminous tag
We no longer support ceph luminous, and have not for a while. This
test case was kept separately from the others because it didn't function
correctly when tested against luminous clusters. As part of the effort
to remove the unsupported build tags, there's no longer even a reason
to keep this as it's own file with the tags removed, so merge it
together.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
2021-11-09 01:24:01 +00:00

246 lines
6.8 KiB
Go

package rados
import (
"encoding/json"
"fmt"
"time"
"github.com/stretchr/testify/assert"
)
var (
osdNumber = 0
monName = "a"
)
func (suite *RadosTestSuite) TestMonCommand() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "df", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.MonCommand(command)
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
// NB: ceph octopus appears to be stricter about the formatting of the keyring
// and now rejects whitespace that older versions did not have a problem with.
const clientKeyFormat = `
[%s]
key = AQD4PGNXBZJNHhAA582iUgxe9DsN+MqFN4Z6Jw==
`
func (suite *RadosTestSuite) TestMonCommandWithInputBuffer() {
suite.SetupConnection()
entity := fmt.Sprintf("client.testMonCmdUser%d", time.Now().UnixNano())
// first add the new test user, specifying its key in the input buffer
command, err := json.Marshal(map[string]interface{}{
"prefix": "auth add",
"format": "json",
"entity": entity,
})
assert.NoError(suite.T(), err)
clientKey := fmt.Sprintf(clientKeyFormat, entity)
inbuf := []byte(clientKey)
buf, info, err := suite.conn.MonCommandWithInputBuffer(command, inbuf)
assert.NoError(suite.T(), err)
expectedInfo := fmt.Sprintf("added key for %s", entity)
assert.Equal(suite.T(), expectedInfo, info)
assert.Equal(suite.T(), "", string(buf[:]))
// get the key and verify that it's what we previously set
command, err = json.Marshal(map[string]interface{}{
"prefix": "auth get-key",
"format": "json",
"entity": entity,
})
assert.NoError(suite.T(), err)
buf, info, err = suite.conn.MonCommand(command)
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), "", info)
assert.Equal(suite.T(),
`{"key":"AQD4PGNXBZJNHhAA582iUgxe9DsN+MqFN4Z6Jw=="}`,
string(buf[:]))
}
func (suite *RadosTestSuite) TestPGCommand() {
suite.SetupConnection()
pgid := "1.2"
command, err := json.Marshal(
map[string]string{"prefix": "query", "pgid": pgid, "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.PGCommand([]byte(pgid), [][]byte{[]byte(command)})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestMgrCommandDescriptions() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "get_command_descriptions", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.MgrCommand([][]byte{command})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestMgrCommand() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "balancer status", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.MgrCommand([][]byte{command})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestMgrCommandMalformedCommand() {
suite.SetupConnection()
command := []byte("JUNK!")
buf, info, err := suite.conn.MgrCommand([][]byte{command})
assert.Error(suite.T(), err)
assert.NotEqual(suite.T(), info, "")
assert.Len(suite.T(), buf, 0)
}
func (suite *RadosTestSuite) TestOsdCommandDescriptions() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "get_command_descriptions", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.OsdCommand(osdNumber, [][]byte{command})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestOsdCommand() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "version", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.OsdCommand(osdNumber, [][]byte{command})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestOsdCommandMalformedCommand() {
suite.SetupConnection()
command := []byte("JUNK!")
buf, info, err := suite.conn.OsdCommand(osdNumber, [][]byte{command})
assert.Error(suite.T(), err)
assert.NotEqual(suite.T(), info, "")
assert.Len(suite.T(), buf, 0)
}
func (suite *RadosTestSuite) TestMonCommandTargetDescriptions() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "get_command_descriptions", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.MonCommandTarget(monName, [][]byte{command})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestMonCommandTarget() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "mon_status"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.MonCommandTarget(monName, [][]byte{command})
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
var message map[string]interface{}
err = json.Unmarshal(buf, &message)
assert.NoError(suite.T(), err)
}
func (suite *RadosTestSuite) TestMonCommandTargetMalformedCommand() {
suite.SetupConnection()
command := []byte("JUNK!")
buf, info, err := suite.conn.MonCommandTarget(monName, [][]byte{command})
assert.Error(suite.T(), err)
assert.NotEqual(suite.T(), info, "")
assert.Len(suite.T(), buf, 0)
}
// Does not work on ceph luminous, but we do not support ceph luminous.
func (suite *RadosTestSuite) TestMgrCommandWithInputBuffer() {
suite.SetupConnection()
command, err := json.Marshal(
map[string]string{"prefix": "crash post", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err := suite.conn.MgrCommandWithInputBuffer(
[][]byte{command}, []byte(`{"crash_id": "foobar", "timestamp": "2020-04-10 15:08:34.659679Z"}`))
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
assert.Len(suite.T(), buf, 0)
command, err = json.Marshal(
map[string]string{"prefix": "crash rm", "id": "foobar", "format": "json"})
assert.NoError(suite.T(), err)
buf, info, err = suite.conn.MgrCommandWithInputBuffer(
[][]byte{command}, nil)
assert.NoError(suite.T(), err)
assert.Equal(suite.T(), info, "")
assert.Len(suite.T(), buf, 0)
}