306 lines
7.9 KiB
Go
306 lines
7.9 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 TestNewNFSClientRPCStats(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
content string
|
||
|
stats *nfs.ClientRPCStats
|
||
|
invalid bool
|
||
|
}{
|
||
|
{
|
||
|
name: "invalid file",
|
||
|
content: "invalid",
|
||
|
invalid: true,
|
||
|
}, {
|
||
|
name: "good old kernel version file",
|
||
|
content: `net 70 70 69 45
|
||
|
rpc 1218785755 374636 1218815394
|
||
|
proc2 18 16 57 74 52 71 73 45 86 0 52 83 61 17 53 50 23 70 82
|
||
|
proc3 22 0 1061909262 48906 4077635 117661341 5 29391916 2570425 2993289 590 0 0 7815 15 1130 0 3983 92385 13332 2 1 23729
|
||
|
proc4 48 98 51 54 83 85 23 24 1 28 73 68 83 12 84 39 68 59 58 88 29 74 69 96 21 84 15 53 86 54 66 56 97 36 49 32 85 81 11 58 32 67 13 28 35 90 1 26 1337
|
||
|
`,
|
||
|
stats: &nfs.ClientRPCStats{
|
||
|
Network: nfs.Network{
|
||
|
NetCount: 70,
|
||
|
UDPCount: 70,
|
||
|
TCPCount: 69,
|
||
|
TCPConnect: 45,
|
||
|
},
|
||
|
ClientRPC: nfs.ClientRPC{
|
||
|
RPCCount: 1218785755,
|
||
|
Retransmissions: 374636,
|
||
|
AuthRefreshes: 1218815394,
|
||
|
},
|
||
|
V2Stats: nfs.V2Stats{
|
||
|
Null: 16,
|
||
|
GetAttr: 57,
|
||
|
SetAttr: 74,
|
||
|
Root: 52,
|
||
|
Lookup: 71,
|
||
|
ReadLink: 73,
|
||
|
Read: 45,
|
||
|
WrCache: 86,
|
||
|
Write: 0,
|
||
|
Create: 52,
|
||
|
Remove: 83,
|
||
|
Rename: 61,
|
||
|
Link: 17,
|
||
|
SymLink: 53,
|
||
|
MkDir: 50,
|
||
|
RmDir: 23,
|
||
|
ReadDir: 70,
|
||
|
FsStat: 82,
|
||
|
},
|
||
|
V3Stats: nfs.V3Stats{
|
||
|
Null: 0,
|
||
|
GetAttr: 1061909262,
|
||
|
SetAttr: 48906,
|
||
|
Lookup: 4077635,
|
||
|
Access: 117661341,
|
||
|
ReadLink: 5,
|
||
|
Read: 29391916,
|
||
|
Write: 2570425,
|
||
|
Create: 2993289,
|
||
|
MkDir: 590,
|
||
|
SymLink: 0,
|
||
|
MkNod: 0,
|
||
|
Remove: 7815,
|
||
|
RmDir: 15,
|
||
|
Rename: 1130,
|
||
|
Link: 0,
|
||
|
ReadDir: 3983,
|
||
|
ReadDirPlus: 92385,
|
||
|
FsStat: 13332,
|
||
|
FsInfo: 2,
|
||
|
PathConf: 1,
|
||
|
Commit: 23729},
|
||
|
ClientV4Stats: nfs.ClientV4Stats{
|
||
|
Null: 98,
|
||
|
Read: 51,
|
||
|
Write: 54,
|
||
|
Commit: 83,
|
||
|
Open: 85,
|
||
|
OpenConfirm: 23,
|
||
|
OpenNoattr: 24,
|
||
|
OpenDowngrade: 1,
|
||
|
Close: 28,
|
||
|
Setattr: 73,
|
||
|
FsInfo: 68,
|
||
|
Renew: 83,
|
||
|
SetClientID: 12,
|
||
|
SetClientIDConfirm: 84,
|
||
|
Lock: 39,
|
||
|
Lockt: 68,
|
||
|
Locku: 59,
|
||
|
Access: 58,
|
||
|
Getattr: 88,
|
||
|
Lookup: 29,
|
||
|
LookupRoot: 74,
|
||
|
Remove: 69,
|
||
|
Rename: 96,
|
||
|
Link: 21,
|
||
|
Symlink: 84,
|
||
|
Create: 15,
|
||
|
Pathconf: 53,
|
||
|
StatFs: 86,
|
||
|
ReadLink: 54,
|
||
|
ReadDir: 66,
|
||
|
ServerCaps: 56,
|
||
|
DelegReturn: 97,
|
||
|
GetACL: 36,
|
||
|
SetACL: 49,
|
||
|
FsLocations: 32,
|
||
|
ReleaseLockowner: 85,
|
||
|
Secinfo: 81,
|
||
|
FsidPresent: 11,
|
||
|
ExchangeID: 58,
|
||
|
CreateSession: 32,
|
||
|
DestroySession: 67,
|
||
|
Sequence: 13,
|
||
|
GetLeaseTime: 28,
|
||
|
ReclaimComplete: 35,
|
||
|
LayoutGet: 90,
|
||
|
GetDeviceInfo: 1,
|
||
|
LayoutCommit: 26,
|
||
|
LayoutReturn: 1337,
|
||
|
SecinfoNoName: 0,
|
||
|
TestStateID: 0,
|
||
|
FreeStateID: 0,
|
||
|
GetDeviceList: 0,
|
||
|
BindConnToSession: 0,
|
||
|
DestroyClientID: 0,
|
||
|
Seek: 0,
|
||
|
Allocate: 0,
|
||
|
DeAllocate: 0,
|
||
|
LayoutStats: 0,
|
||
|
Clone: 0,
|
||
|
},
|
||
|
},
|
||
|
}, {
|
||
|
name: "good file",
|
||
|
content: `net 18628 0 18628 6
|
||
|
rpc 4329785 0 4338291
|
||
|
proc2 18 2 69 0 0 4410 0 0 0 0 0 0 0 0 0 0 0 99 2
|
||
|
proc3 22 1 4084749 29200 94754 32580 186 47747 7981 8639 0 6356 0 6962 0 7958 0 0 241 4 4 2 39
|
||
|
proc4 61 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 2 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 0 0 0 0
|
||
|
`,
|
||
|
stats: &nfs.ClientRPCStats{
|
||
|
Network: nfs.Network{
|
||
|
NetCount: 18628,
|
||
|
UDPCount: 0,
|
||
|
TCPCount: 18628,
|
||
|
TCPConnect: 6,
|
||
|
},
|
||
|
ClientRPC: nfs.ClientRPC{
|
||
|
RPCCount: 4329785,
|
||
|
Retransmissions: 0,
|
||
|
AuthRefreshes: 4338291,
|
||
|
},
|
||
|
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: 1,
|
||
|
GetAttr: 4084749,
|
||
|
SetAttr: 29200,
|
||
|
Lookup: 94754,
|
||
|
Access: 32580,
|
||
|
ReadLink: 186,
|
||
|
Read: 47747,
|
||
|
Write: 7981,
|
||
|
Create: 8639,
|
||
|
MkDir: 0,
|
||
|
SymLink: 6356,
|
||
|
MkNod: 0,
|
||
|
Remove: 6962,
|
||
|
RmDir: 0,
|
||
|
Rename: 7958,
|
||
|
Link: 0,
|
||
|
ReadDir: 0,
|
||
|
ReadDirPlus: 241,
|
||
|
FsStat: 4,
|
||
|
FsInfo: 4,
|
||
|
PathConf: 2,
|
||
|
Commit: 39,
|
||
|
},
|
||
|
ClientV4Stats: nfs.ClientV4Stats{
|
||
|
Null: 1,
|
||
|
Read: 0,
|
||
|
Write: 0,
|
||
|
Commit: 0,
|
||
|
Open: 0,
|
||
|
OpenConfirm: 0,
|
||
|
OpenNoattr: 0,
|
||
|
OpenDowngrade: 0,
|
||
|
Close: 0,
|
||
|
Setattr: 0,
|
||
|
FsInfo: 0,
|
||
|
Renew: 0,
|
||
|
SetClientID: 1,
|
||
|
SetClientIDConfirm: 1,
|
||
|
Lock: 0,
|
||
|
Lockt: 0,
|
||
|
Locku: 0,
|
||
|
Access: 0,
|
||
|
Getattr: 0,
|
||
|
Lookup: 0,
|
||
|
LookupRoot: 0,
|
||
|
Remove: 2,
|
||
|
Rename: 0,
|
||
|
Link: 0,
|
||
|
Symlink: 0,
|
||
|
Create: 0,
|
||
|
Pathconf: 0,
|
||
|
StatFs: 0,
|
||
|
ReadLink: 0,
|
||
|
ReadDir: 0,
|
||
|
ServerCaps: 0,
|
||
|
DelegReturn: 0,
|
||
|
GetACL: 0,
|
||
|
SetACL: 0,
|
||
|
FsLocations: 0,
|
||
|
ReleaseLockowner: 0,
|
||
|
Secinfo: 0,
|
||
|
FsidPresent: 0,
|
||
|
ExchangeID: 0,
|
||
|
CreateSession: 0,
|
||
|
DestroySession: 0,
|
||
|
Sequence: 0,
|
||
|
GetLeaseTime: 0,
|
||
|
ReclaimComplete: 0,
|
||
|
LayoutGet: 0,
|
||
|
GetDeviceInfo: 0,
|
||
|
LayoutCommit: 0,
|
||
|
LayoutReturn: 0,
|
||
|
SecinfoNoName: 0,
|
||
|
TestStateID: 0,
|
||
|
FreeStateID: 0,
|
||
|
GetDeviceList: 0,
|
||
|
BindConnToSession: 0,
|
||
|
DestroyClientID: 0,
|
||
|
Seek: 0,
|
||
|
Allocate: 0,
|
||
|
DeAllocate: 0,
|
||
|
LayoutStats: 0,
|
||
|
Clone: 0,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
stats, err := nfs.ParseClientRPCStats(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)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|