blob: b09b3b580c61c49687370cac7d60933e29e65b99 [file] [log] [blame]
// Copyright 2018 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package nfs_test
import (
"reflect"
"strings"
"testing"
"github.com/prometheus/procfs/nfs"
)
func TestNewNFSdServerRPCStats(t *testing.T) {
tests := []struct {
name string
content string
stats *nfs.ServerRPCStats
invalid bool
}{
{
name: "invalid file",
content: "invalid",
invalid: true,
}, {
name: "good file",
content: `rc 0 6 18622
fh 0 0 0 0 0
io 157286400 0
th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
ra 32 0 0 0 0 0 0 0 0 0 0 0
net 18628 0 18628 6
rpc 18628 0 0 0 0
proc2 18 2 69 0 0 4410 0 0 0 0 0 0 0 0 0 0 0 99 2
proc3 22 2 112 0 2719 111 0 0 0 0 0 0 0 0 0 0 0 27 216 0 2 1 0
proc4 2 2 10853
proc4ops 72 0 0 0 1098 2 0 0 0 0 8179 5896 0 0 0 0 5900 0 0 2 0 2 0 9609 0 2 150 1272 0 0 0 1236 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
`,
stats: &nfs.ServerRPCStats{
ReplyCache: nfs.ReplyCache{
Hits: 0,
Misses: 6,
NoCache: 18622,
},
FileHandles: nfs.FileHandles{
Stale: 0,
TotalLookups: 0,
AnonLookups: 0,
DirNoCache: 0,
NoDirNoCache: 0,
},
InputOutput: nfs.InputOutput{
Read: 157286400,
Write: 0,
},
Threads: nfs.Threads{
Threads: 8,
FullCnt: 0,
},
ReadAheadCache: nfs.ReadAheadCache{
CacheSize: 32,
CacheHistogram: []uint64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
NotFound: 0,
},
Network: nfs.Network{
NetCount: 18628,
UDPCount: 0,
TCPCount: 18628,
TCPConnect: 6,
},
ServerRPC: nfs.ServerRPC{
RPCCount: 18628,
BadCnt: 0,
BadFmt: 0,
BadAuth: 0,
BadcInt: 0,
},
V2Stats: nfs.V2Stats{
Null: 2,
GetAttr: 69,
SetAttr: 0,
Root: 0,
Lookup: 4410,
ReadLink: 0,
Read: 0,
WrCache: 0,
Write: 0,
Create: 0,
Remove: 0,
Rename: 0,
Link: 0,
SymLink: 0,
MkDir: 0,
RmDir: 0,
ReadDir: 99,
FsStat: 2,
},
V3Stats: nfs.V3Stats{
Null: 2,
GetAttr: 112,
SetAttr: 0,
Lookup: 2719,
Access: 111,
ReadLink: 0,
Read: 0,
Write: 0,
Create: 0,
MkDir: 0,
SymLink: 0,
MkNod: 0,
Remove: 0,
RmDir: 0,
Rename: 0,
Link: 0,
ReadDir: 27,
ReadDirPlus: 216,
FsStat: 0,
FsInfo: 2,
PathConf: 1,
Commit: 0,
},
ServerV4Stats: nfs.ServerV4Stats{
Null: 2,
Compound: 10853,
},
V4Ops: nfs.V4Ops{
Op0Unused: 0,
Op1Unused: 0,
Op2Future: 0,
Access: 1098,
Close: 2,
Commit: 0,
Create: 0,
DelegPurge: 0,
DelegReturn: 0,
GetAttr: 8179,
GetFH: 5896,
Link: 0,
Lock: 0,
Lockt: 0,
Locku: 0,
Lookup: 5900,
LookupRoot: 0,
Nverify: 0,
Open: 2,
OpenAttr: 0,
OpenConfirm: 2,
OpenDgrd: 0,
PutFH: 9609,
PutPubFH: 0,
PutRootFH: 2,
Read: 150,
ReadDir: 1272,
ReadLink: 0,
Remove: 0,
Rename: 0,
Renew: 1236,
RestoreFH: 0,
SaveFH: 0,
SecInfo: 0,
SetAttr: 0,
Verify: 3,
Write: 3,
RelLockOwner: 0,
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
stats, err := nfs.ParseServerRPCStats(strings.NewReader(tt.content))
if tt.invalid && err == nil {
t.Fatal("expected an error, but none occurred")
}
if !tt.invalid && err != nil {
t.Fatalf("unexpected error: %v", err)
}
if want, have := tt.stats, stats; !reflect.DeepEqual(want, have) {
t.Fatalf("unexpected NFS stats:\nwant:\n%v\nhave:\n%v", want, have)
}
})
}
}