612 lines
12 KiB
Go
612 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",
|
|
true,
|
|
60,
|
|
)
|
|
|
|
require.Equal(t, sl.CommandLatency, int64(0))
|
|
require.Equal(t, sl.ReadLatency, int64(0))
|
|
require.Equal(t, sl.WriteLatency, int64(0))
|
|
require.Equal(t, sl.CommandOpsCnt, int64(0))
|
|
require.Equal(t, sl.ReadOpsCnt, int64(0))
|
|
require.Equal(t, sl.WriteOpsCnt, int64(0))
|
|
}
|
|
|
|
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",
|
|
true,
|
|
60,
|
|
)
|
|
|
|
require.Equal(t, sl.CommandLatency, int64(0))
|
|
require.Equal(t, sl.ReadLatency, int64(0))
|
|
require.Equal(t, sl.WriteLatency, int64(0))
|
|
require.Equal(t, sl.CommandOpsCnt, int64(0))
|
|
require.Equal(t, sl.ReadOpsCnt, int64(0))
|
|
require.Equal(t, sl.WriteOpsCnt, int64(0))
|
|
}
|
|
|
|
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",
|
|
true,
|
|
60,
|
|
)
|
|
|
|
require.Equal(t, sl.CommandLatency, int64(59177981552))
|
|
require.Equal(t, sl.ReadLatency, int64(2255946760057))
|
|
require.Equal(t, sl.WriteLatency, int64(494479456987))
|
|
require.Equal(t, sl.CommandOpsCnt, int64(1019152861))
|
|
require.Equal(t, sl.ReadOpsCnt, int64(4189049884))
|
|
require.Equal(t, sl.WriteOpsCnt, int64(1691021287))
|
|
}
|
|
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
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",
|
|
true,
|
|
60,
|
|
)
|
|
|
|
expected := &CollectionLockStatus{
|
|
ReadAcquireWaitsPercentage: 20,
|
|
WriteAcquireWaitsPercentage: 10,
|
|
ReadAcquireTimeMicros: 150,
|
|
WriteAcquireTimeMicros: 55,
|
|
}
|
|
|
|
require.Equal(t, expected, sl.CollectionLocks)
|
|
}
|