597 lines
12 KiB
Go
597 lines
12 KiB
Go
package mongodb
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLatencyStats(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Bits: 0,
|
|
Resident: 0,
|
|
Virtual: 0,
|
|
Supported: false,
|
|
Mapped: 0,
|
|
MappedWithJournal: 0,
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Bits: 0,
|
|
Resident: 0,
|
|
Virtual: 0,
|
|
Supported: false,
|
|
Mapped: 0,
|
|
MappedWithJournal: 0,
|
|
},
|
|
OpLatencies: &opLatenciesStats{
|
|
Reads: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
Writes: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
Commands: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Equal(t, int64(0), sl.CommandLatency)
|
|
require.Equal(t, int64(0), sl.ReadLatency)
|
|
require.Equal(t, int64(0), sl.WriteLatency)
|
|
require.Equal(t, int64(0), sl.CommandOpsCnt)
|
|
require.Equal(t, int64(0), sl.ReadOpsCnt)
|
|
require.Equal(t, int64(0), sl.WriteOpsCnt)
|
|
}
|
|
|
|
func TestLatencyStatsDiffZero(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Bits: 0,
|
|
Resident: 0,
|
|
Virtual: 0,
|
|
Supported: false,
|
|
Mapped: 0,
|
|
MappedWithJournal: 0,
|
|
},
|
|
OpLatencies: &opLatenciesStats{
|
|
Reads: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
Writes: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
Commands: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Bits: 0,
|
|
Resident: 0,
|
|
Virtual: 0,
|
|
Supported: false,
|
|
Mapped: 0,
|
|
MappedWithJournal: 0,
|
|
},
|
|
OpLatencies: &opLatenciesStats{
|
|
Reads: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
Writes: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
Commands: &latencyStats{
|
|
Ops: 0,
|
|
Latency: 0,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Equal(t, int64(0), sl.CommandLatency)
|
|
require.Equal(t, int64(0), sl.ReadLatency)
|
|
require.Equal(t, int64(0), sl.WriteLatency)
|
|
require.Equal(t, int64(0), sl.CommandOpsCnt)
|
|
require.Equal(t, int64(0), sl.ReadOpsCnt)
|
|
require.Equal(t, int64(0), sl.WriteOpsCnt)
|
|
}
|
|
|
|
func TestLatencyStatsDiff(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Bits: 0,
|
|
Resident: 0,
|
|
Virtual: 0,
|
|
Supported: false,
|
|
Mapped: 0,
|
|
MappedWithJournal: 0,
|
|
},
|
|
OpLatencies: &opLatenciesStats{
|
|
Reads: &latencyStats{
|
|
Ops: 4189041956,
|
|
Latency: 2255922322753,
|
|
},
|
|
Writes: &latencyStats{
|
|
Ops: 1691019457,
|
|
Latency: 494478256915,
|
|
},
|
|
Commands: &latencyStats{
|
|
Ops: 1019150402,
|
|
Latency: 59177710371,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Bits: 0,
|
|
Resident: 0,
|
|
Virtual: 0,
|
|
Supported: false,
|
|
Mapped: 0,
|
|
MappedWithJournal: 0,
|
|
},
|
|
OpLatencies: &opLatenciesStats{
|
|
Reads: &latencyStats{
|
|
Ops: 4189049884,
|
|
Latency: 2255946760057,
|
|
},
|
|
Writes: &latencyStats{
|
|
Ops: 1691021287,
|
|
Latency: 494479456987,
|
|
},
|
|
Commands: &latencyStats{
|
|
Ops: 1019152861,
|
|
Latency: 59177981552,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Equal(t, int64(59177981552), sl.CommandLatency)
|
|
require.Equal(t, int64(2255946760057), sl.ReadLatency)
|
|
require.Equal(t, int64(494479456987), sl.WriteLatency)
|
|
require.Equal(t, int64(1019152861), sl.CommandOpsCnt)
|
|
require.Equal(t, int64(4189049884), sl.ReadOpsCnt)
|
|
require.Equal(t, int64(1691021287), sl.WriteOpsCnt)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenLocksMissingInOldStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenGlobalLockStatsMissingInOldStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenGlobalLockStatsEmptyInOldStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenCollectionLockStatsMissingInOldStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenCollectionLockStatsEmptyInOldStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
"Collection": {},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenLocksMissingInNewStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenGlobalLockStatsMissingInNewStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenGlobalLockStatsEmptyInNewStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenCollectionLockStatsMissingInNewStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsNilWhenCollectionLockStatsEmptyInNewStat(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
"Collection": {},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
require.Nil(t, sl.CollectionLocks)
|
|
}
|
|
|
|
func TestLocksStatsPopulated(t *testing.T) {
|
|
sl := newStatLine(
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
"Collection": {
|
|
AcquireWaitCount: &readWriteLockTimes{
|
|
Read: 1,
|
|
Write: 2,
|
|
},
|
|
AcquireCount: &readWriteLockTimes{
|
|
Read: 5,
|
|
Write: 10,
|
|
},
|
|
TimeAcquiringMicros: readWriteLockTimes{
|
|
Read: 100,
|
|
Write: 200,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
mongoStatus{
|
|
ServerStatus: &serverStatus{
|
|
Connections: &connectionStats{},
|
|
Mem: &memStats{
|
|
Supported: false,
|
|
},
|
|
Locks: map[string]lockStats{
|
|
"Global": {
|
|
AcquireCount: &readWriteLockTimes{},
|
|
},
|
|
"Collection": {
|
|
AcquireWaitCount: &readWriteLockTimes{
|
|
Read: 2,
|
|
Write: 4,
|
|
},
|
|
AcquireCount: &readWriteLockTimes{
|
|
Read: 10,
|
|
Write: 30,
|
|
},
|
|
TimeAcquiringMicros: readWriteLockTimes{
|
|
Read: 250,
|
|
Write: 310,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
"foo",
|
|
60,
|
|
)
|
|
|
|
expected := &collectionLockStatus{
|
|
ReadAcquireWaitsPercentage: 20,
|
|
WriteAcquireWaitsPercentage: 10,
|
|
ReadAcquireTimeMicros: 150,
|
|
WriteAcquireTimeMicros: 55,
|
|
}
|
|
|
|
require.Equal(t, expected, sl.CollectionLocks)
|
|
}
|