197 lines
4.5 KiB
Go
197 lines
4.5 KiB
Go
|
// 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)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|