mirror of https://github.com/ceph/go-ceph
169 lines
4.2 KiB
Go
169 lines
4.2 KiB
Go
|
package admin
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
// sampleOldDaemonStatus1 and sampleOldDaemonStatus2 are examples of the json
|
||
|
// returned for daemon status before Ceph v16.2.5. It is not used by the tests
|
||
|
// as the code now only supports the format of v16.2.5 and later. This is
|
||
|
// retained for reference and the off chance that someone asks go-ceph to
|
||
|
// support the older format.
|
||
|
|
||
|
var sampleOldDaemonStatus1 = `
|
||
|
{"4157": {"1": {"name": "cephfs", "directory_count": 0, "peers": {}}}}
|
||
|
`
|
||
|
|
||
|
var sampleOldDaemonStatus2 = `
|
||
|
{
|
||
|
"4154": {
|
||
|
"1": {
|
||
|
"name": "cephfs",
|
||
|
"directory_count": 1,
|
||
|
"peers": {
|
||
|
"d284fccd-6110-4e94-843c-78ecda3aef38": {
|
||
|
"remote": {"client_name": "client.mirror_remote", "cluster_name": "ceph_b", "fs_name": "cephfs"},
|
||
|
"stats": {"failure_count": 1, "recovery_count": 0}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
var sampleDaemonStatus1 = `
|
||
|
[
|
||
|
{
|
||
|
"daemon_id": 4115,
|
||
|
"filesystems": [
|
||
|
{
|
||
|
"filesystem_id": 1,
|
||
|
"name": "cephfs",
|
||
|
"directory_count": 0,
|
||
|
"peers": []
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
`
|
||
|
|
||
|
var sampleDaemonStatus2 = `
|
||
|
[
|
||
|
{
|
||
|
"daemon_id": 4143,
|
||
|
"filesystems": [
|
||
|
{
|
||
|
"filesystem_id": 1,
|
||
|
"name": "cephfs",
|
||
|
"directory_count": 1,
|
||
|
"peers": [
|
||
|
{
|
||
|
"uuid": "43c50942-9dba-4f66-8f9b-102378fa863e",
|
||
|
"remote": {
|
||
|
"client_name": "client.mirror_remote",
|
||
|
"cluster_name": "ceph_b",
|
||
|
"fs_name": "cephfs"
|
||
|
},
|
||
|
"stats": {
|
||
|
"failure_count": 1,
|
||
|
"recovery_count": 0
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
`
|
||
|
|
||
|
var samplePeerList1 = `
|
||
|
{
|
||
|
"f138660d-7b22-4036-95ba-0fda727bff40": {
|
||
|
"client_name": "client.mirror_remote",
|
||
|
"site_name": "ceph_b",
|
||
|
"fs_name": "cephfs",
|
||
|
"mon_host": "test_ceph_b"
|
||
|
}
|
||
|
}
|
||
|
`
|
||
|
|
||
|
func TestParseDaemonStatus(t *testing.T) {
|
||
|
t.Run("error", func(t *testing.T) {
|
||
|
r := newResponse(nil, "", errors.New("snark"))
|
||
|
_, err := parseDaemonStatus(r)
|
||
|
assert.Error(t, err)
|
||
|
assert.Equal(t, "snark", err.Error())
|
||
|
})
|
||
|
t.Run("statusSet", func(t *testing.T) {
|
||
|
r := newResponse(nil, "oopsie", nil)
|
||
|
_, err := parseDaemonStatus(r)
|
||
|
assert.Error(t, err)
|
||
|
})
|
||
|
t.Run("ok", func(t *testing.T) {
|
||
|
r := newResponse([]byte(sampleDaemonStatus1), "", nil)
|
||
|
ds, err := parseDaemonStatus(r)
|
||
|
assert.NoError(t, err)
|
||
|
if assert.NotNil(t, ds) && assert.Len(t, ds, 1) {
|
||
|
dsi := ds[0]
|
||
|
assert.Equal(t, DaemonID(4115), dsi.DaemonID)
|
||
|
if assert.Len(t, dsi.FileSystems, 1) {
|
||
|
fs := dsi.FileSystems[0]
|
||
|
assert.Len(t, fs.Peers, 0)
|
||
|
assert.Equal(t, "cephfs", fs.Name)
|
||
|
assert.Equal(t, int64(0), fs.DirectoryCount)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
t.Run("ok2", func(t *testing.T) {
|
||
|
r := newResponse([]byte(sampleDaemonStatus2), "", nil)
|
||
|
ds, err := parseDaemonStatus(r)
|
||
|
assert.NoError(t, err)
|
||
|
if assert.NotNil(t, ds) && assert.Len(t, ds, 1) {
|
||
|
dsi := ds[0]
|
||
|
assert.Equal(t, DaemonID(4143), dsi.DaemonID)
|
||
|
if assert.Len(t, dsi.FileSystems, 1) {
|
||
|
fs := dsi.FileSystems[0]
|
||
|
assert.Equal(t, "cephfs", fs.Name)
|
||
|
assert.Equal(t, int64(1), fs.DirectoryCount)
|
||
|
if assert.Len(t, fs.Peers, 1) {
|
||
|
p := fs.Peers[0]
|
||
|
assert.Equal(t, "ceph_b", p.Remote.ClusterName)
|
||
|
assert.Equal(t, "cephfs", p.Remote.FSName)
|
||
|
assert.Equal(t, uint64(1), p.Stats.FailureCount)
|
||
|
assert.Equal(t, uint64(0), p.Stats.RecoveryCount)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestParsePeerList(t *testing.T) {
|
||
|
t.Run("error", func(t *testing.T) {
|
||
|
r := newResponse(nil, "", errors.New("snark"))
|
||
|
_, err := parsePeerList(r)
|
||
|
assert.Error(t, err)
|
||
|
assert.Equal(t, "snark", err.Error())
|
||
|
})
|
||
|
t.Run("statusSet", func(t *testing.T) {
|
||
|
r := newResponse(nil, "oopsie", nil)
|
||
|
_, err := parsePeerList(r)
|
||
|
assert.Error(t, err)
|
||
|
})
|
||
|
t.Run("ok", func(t *testing.T) {
|
||
|
r := newResponse([]byte(samplePeerList1), "", nil)
|
||
|
plr, err := parsePeerList(r)
|
||
|
assert.NoError(t, err)
|
||
|
if assert.NotNil(t, plr) && assert.Len(t, plr, 1) {
|
||
|
p, ok := plr[PeerUUID("f138660d-7b22-4036-95ba-0fda727bff40")]
|
||
|
assert.True(t, ok)
|
||
|
assert.Equal(t, "client.mirror_remote", p.ClientName)
|
||
|
assert.Equal(t, "ceph_b", p.SiteName)
|
||
|
assert.Equal(t, "cephfs", p.FSName)
|
||
|
assert.Equal(t, "test_ceph_b", p.MonHost)
|
||
|
}
|
||
|
})
|
||
|
}
|