@@ -23,25 +23,30 @@ func TestFS_MDStat(t *testing.T) {
23
23
if err != nil {
24
24
t .Fatalf ("parsing of reference-file failed entirely: %s" , err )
25
25
}
26
+ // TODO: Test cases to capture in future:
27
+ // WriteMostly devices
28
+ // Journal devices
29
+ // Replacement devices
30
+ // Global hotspares
26
31
27
32
refs := map [string ]MDStat {
28
- "md127" : {Name : "md127" , Type : "raid1" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 312319552 , BlocksSynced : 312319552 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdi2" , "sdj2" }},
29
- "md0" : {Name : "md0" , Type : "raid1" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 248896 , BlocksSynced : 248896 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdi1" , "sdj1" }},
30
- "md4" : {Name : "md4" , Type : "raid1" , ActivityState : "inactive" , DisksActive : 0 , DisksTotal : 0 , DisksFailed : 1 , DisksDown : 0 , DisksSpare : 1 , BlocksTotal : 4883648 , BlocksSynced : 4883648 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sda3" , "sdb3" }},
31
- "md6" : {Name : "md6" , Type : "raid1" , ActivityState : "recovering" , DisksActive : 1 , DisksTotal : 2 , DisksFailed : 1 , DisksDown : 1 , DisksSpare : 1 , BlocksTotal : 195310144 , BlocksSynced : 16775552 , BlocksSyncedPct : 8.5 , BlocksSyncedFinishTime : 17 , BlocksSyncedSpeed : 259783 , Devices : []string { "sdb2" , "sdc" , "sda2" }},
32
- "md3" : {Name : "md3" , Type : "raid6" , ActivityState : "active" , DisksActive : 8 , DisksTotal : 8 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 2 , BlocksTotal : 5853468288 , BlocksSynced : 5853468288 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sda1" , "sdh1" , "sdg1" , "sdf1" , "sde1" , "sdd1" , "sdc1" , "sdb1" , "sdd1" , "sdd2" }},
33
- "md8" : {Name : "md8" , Type : "raid1" , ActivityState : "resyncing" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 2 , BlocksTotal : 195310144 , BlocksSynced : 16775552 , BlocksSyncedPct : 8.5 , BlocksSyncedFinishTime : 17 , BlocksSyncedSpeed : 259783 , Devices : []string { "sdb1" , "sda1" , "sdc" , "sde" }},
34
- "md7" : {Name : "md7" , Type : "raid6" , ActivityState : "active" , DisksActive : 3 , DisksTotal : 4 , DisksFailed : 1 , DisksDown : 1 , DisksSpare : 0 , BlocksTotal : 7813735424 , BlocksSynced : 7813735424 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdb1" , "sde1" , "sdd1" , "sdc1" }},
35
- "md9" : {Name : "md9" , Type : "raid1" , ActivityState : "resyncing" , DisksActive : 4 , DisksTotal : 4 , DisksSpare : 1 , DisksDown : 0 , DisksFailed : 2 , BlocksTotal : 523968 , BlocksSynced : 0 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdc2" , "sdd2" , "sdb2" , "sda2" , "sde" , "sdf" , "sdg" }},
36
- "md10" : {Name : "md10" , Type : "raid0" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 314159265 , BlocksSynced : 314159265 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sda1" , "sdb1" }},
37
- "md11" : {Name : "md11" , Type : "raid1" , ActivityState : "resyncing" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 1 , DisksDown : 0 , DisksSpare : 2 , BlocksTotal : 4190208 , BlocksSynced : 0 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdb2" , "sdc2" , "sdc3" , "hda" , "ssdc2" }},
38
- "md12" : {Name : "md12" , Type : "raid0" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksSpare : 0 , DisksDown : 0 , DisksFailed : 0 , BlocksTotal : 3886394368 , BlocksSynced : 3886394368 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdc2" , "sdd2" }},
39
- "md120" : {Name : "md120" , Type : "linear" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 2095104 , BlocksSynced : 2095104 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sda1" , "sdb1" }},
40
- "md126" : {Name : "md126" , Type : "raid0" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 1855870976 , BlocksSynced : 1855870976 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdb" , "sdc" }},
41
- "md219" : {Name : "md219" , Type : "unknown" , ActivityState : "inactive" , DisksTotal : 0 , DisksFailed : 0 , DisksActive : 0 , DisksDown : 0 , DisksSpare : 3 , BlocksTotal : 7932 , BlocksSynced : 7932 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { " sdc" , "sda" }},
42
- "md00" : {Name : "md00" , Type : "raid0" , ActivityState : "active" , DisksActive : 1 , DisksTotal : 1 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 4186624 , BlocksSynced : 4186624 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "xvdb" }},
43
- "md101" : {Name : "md101" , Type : "raid0" , ActivityState : "active" , DisksActive : 3 , DisksTotal : 3 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 322560 , BlocksSynced : 322560 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []string { "sdb" , "sdd" , "sdc" }},
44
- "md201" : {Name : "md201" , Type : "raid1" , ActivityState : "checking" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 1993728 , BlocksSynced : 114176 , BlocksSyncedPct : 5.7 , BlocksSyncedFinishTime : 0.2 , BlocksSyncedSpeed : 114176 , Devices : []string { "sda3" , "sdb3" }},
33
+ "md127" : {Name : "md127" , Type : "raid1" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 312319552 , BlocksSynced : 312319552 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdi2" , DescriptorIndex : 0 }, { Name : "sdj2" , DescriptorIndex : 1 } }},
34
+ "md0" : {Name : "md0" , Type : "raid1" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 248896 , BlocksSynced : 248896 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdi1" , DescriptorIndex : 0 }, { Name : "sdj1" , DescriptorIndex : 1 } }},
35
+ "md4" : {Name : "md4" , Type : "raid1" , ActivityState : "inactive" , DisksActive : 0 , DisksTotal : 0 , DisksFailed : 1 , DisksDown : 0 , DisksSpare : 1 , BlocksTotal : 4883648 , BlocksSynced : 4883648 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sda3" , Faulty : true , DescriptorIndex : 0 }, { Name : "sdb3" , Spare : true , DescriptorIndex : 1 } }},
36
+ "md6" : {Name : "md6" , Type : "raid1" , ActivityState : "recovering" , DisksActive : 1 , DisksTotal : 2 , DisksFailed : 1 , DisksDown : 1 , DisksSpare : 1 , BlocksTotal : 195310144 , BlocksSynced : 16775552 , BlocksSyncedPct : 8.5 , BlocksSyncedFinishTime : 17 , BlocksSyncedSpeed : 259783 , Devices : []MDStatComponent {{ Name : "sdb2" , DescriptorIndex : 2 , Faulty : true }, { Name : "sdc" , DescriptorIndex : 1 , Spare : true }, { Name : "sda2" , DescriptorIndex : 0 } }},
37
+ "md3" : {Name : "md3" , Type : "raid6" , ActivityState : "active" , DisksActive : 8 , DisksTotal : 8 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 2 , BlocksTotal : 5853468288 , BlocksSynced : 5853468288 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sda1" , DescriptorIndex : 8 }, { Name : "sdh1" , DescriptorIndex : 7 }, { Name : "sdg1" , DescriptorIndex : 6 }, { Name : "sdf1" , DescriptorIndex : 5 }, { Name : "sde1" , DescriptorIndex : 11 }, { Name : "sdd1" , DescriptorIndex : 3 }, { Name : "sdc1" , DescriptorIndex : 10 }, { Name : "sdb1" , DescriptorIndex : 9 }, { Name : "sdd1" , DescriptorIndex : 10 , Spare : true }, { Name : "sdd2" , DescriptorIndex : 11 , Spare : true } }},
38
+ "md8" : {Name : "md8" , Type : "raid1" , ActivityState : "resyncing" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 2 , BlocksTotal : 195310144 , BlocksSynced : 16775552 , BlocksSyncedPct : 8.5 , BlocksSyncedFinishTime : 17 , BlocksSyncedSpeed : 259783 , Devices : []MDStatComponent {{ Name : "sdb1" , DescriptorIndex : 1 }, { Name : "sda1" , DescriptorIndex : 0 }, { Name : "sdc" , DescriptorIndex : 2 , Spare : true }, { Name : "sde" , DescriptorIndex : 3 , Spare : true } }},
39
+ "md7" : {Name : "md7" , Type : "raid6" , ActivityState : "active" , DisksActive : 3 , DisksTotal : 4 , DisksFailed : 1 , DisksDown : 1 , DisksSpare : 0 , BlocksTotal : 7813735424 , BlocksSynced : 7813735424 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdb1" , DescriptorIndex : 0 }, { Name : "sde1" , DescriptorIndex : 3 }, { Name : "sdd1" , DescriptorIndex : 2 }, { Name : "sdc1" , DescriptorIndex : 1 , Faulty : true } }},
40
+ "md9" : {Name : "md9" , Type : "raid1" , ActivityState : "resyncing" , DisksActive : 4 , DisksTotal : 4 , DisksSpare : 1 , DisksDown : 0 , DisksFailed : 2 , BlocksTotal : 523968 , BlocksSynced : 0 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdc2" , DescriptorIndex : 2 }, { Name : "sdd2" , DescriptorIndex : 3 }, { Name : "sdb2" , DescriptorIndex : 1 }, { Name : "sda2" , DescriptorIndex : 0 }, { Name : "sde" , DescriptorIndex : 4 , Faulty : true }, { Name : "sdf" , DescriptorIndex : 5 , Faulty : true }, { Name : "sdg" , DescriptorIndex : 6 , Spare : true } }},
41
+ "md10" : {Name : "md10" , Type : "raid0" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 314159265 , BlocksSynced : 314159265 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sda1" , DescriptorIndex : 0 }, { Name : "sdb1" , DescriptorIndex : 1 } }},
42
+ "md11" : {Name : "md11" , Type : "raid1" , ActivityState : "resyncing" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 1 , DisksDown : 0 , DisksSpare : 2 , BlocksTotal : 4190208 , BlocksSynced : 0 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdb2" , DescriptorIndex : 0 }, { Name : "sdc2" , DescriptorIndex : 1 }, { Name : "sdc3" , DescriptorIndex : 2 , Faulty : true }, { Name : "hda" , DescriptorIndex : 4 , Spare : true }, { Name : "ssdc2" , DescriptorIndex : 3 , Spare : true } }},
43
+ "md12" : {Name : "md12" , Type : "raid0" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksSpare : 0 , DisksDown : 0 , DisksFailed : 0 , BlocksTotal : 3886394368 , BlocksSynced : 3886394368 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdc2" , DescriptorIndex : 0 }, { Name : "sdd2" , DescriptorIndex : 1 } }},
44
+ "md120" : {Name : "md120" , Type : "linear" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 2095104 , BlocksSynced : 2095104 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sda1" , DescriptorIndex : 1 }, { Name : "sdb1" , DescriptorIndex : 0 } }},
45
+ "md126" : {Name : "md126" , Type : "raid0" , ActivityState : "active" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 1855870976 , BlocksSynced : 1855870976 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdb" , DescriptorIndex : 1 }, { Name : "sdc" , DescriptorIndex : 0 } }},
46
+ "md219" : {Name : "md219" , Type : "unknown" , ActivityState : "inactive" , DisksTotal : 0 , DisksFailed : 0 , DisksActive : 0 , DisksDown : 0 , DisksSpare : 3 , BlocksTotal : 7932 , BlocksSynced : 7932 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdb" , DescriptorIndex : 2 , Spare : true }, { Name : " sdc" , DescriptorIndex : 1 , Spare : true }, { Name : "sda" , DescriptorIndex : 0 , Spare : true } }},
47
+ "md00" : {Name : "md00" , Type : "raid0" , ActivityState : "active" , DisksActive : 1 , DisksTotal : 1 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 4186624 , BlocksSynced : 4186624 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "xvdb" , DescriptorIndex : 0 } }},
48
+ "md101" : {Name : "md101" , Type : "raid0" , ActivityState : "active" , DisksActive : 3 , DisksTotal : 3 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 322560 , BlocksSynced : 322560 , BlocksSyncedPct : 0 , BlocksSyncedFinishTime : 0 , BlocksSyncedSpeed : 0 , Devices : []MDStatComponent {{ Name : "sdb" , DescriptorIndex : 2 }, { Name : "sdd" , DescriptorIndex : 1 }, { Name : "sdc" , DescriptorIndex : 0 } }},
49
+ "md201" : {Name : "md201" , Type : "raid1" , ActivityState : "checking" , DisksActive : 2 , DisksTotal : 2 , DisksFailed : 0 , DisksDown : 0 , DisksSpare : 0 , BlocksTotal : 1993728 , BlocksSynced : 114176 , BlocksSyncedPct : 5.7 , BlocksSyncedFinishTime : 0.2 , BlocksSyncedSpeed : 114176 , Devices : []MDStatComponent {{ Name : "sda3" , DescriptorIndex : 0 }, { Name : "sdb3" , DescriptorIndex : 1 } }},
45
50
}
46
51
47
52
if want , have := len (refs ), len (mdStats ); want != have {
@@ -56,18 +61,32 @@ func TestFS_MDStat(t *testing.T) {
56
61
}
57
62
58
63
func TestInvalidMdstat (t * testing.T ) {
59
- invalidMount := [][]byte {[]byte (`
64
+ invalidMount := [][]byte {
65
+ // Test invalid Personality and format
66
+ []byte (`
60
67
Personalities : [invalid]
61
68
md3 : invalid
62
69
314159265 blocks 64k chunks
63
70
64
71
unused devices: <none>
65
72
` ),
73
+ // Test extra blank line
66
74
[]byte (`
67
75
md12 : active raid0 sdc2[0] sdd2[1]
68
76
69
77
3886394368 blocks super 1.2 512k chunks
70
- ` )}
78
+ ` ),
79
+ // test for impossible component state
80
+ []byte (`
81
+ md127 : active raid1 sdi2[0] sdj2[1](Z)
82
+ 312319552 blocks [2/2] [UU]
83
+ ` ),
84
+ // test for malformed component state
85
+ []byte (`
86
+ md127 : active raid1 sdi2[0] sdj2[X]
87
+ 312319552 blocks [2/2] [UU]
88
+ ` ),
89
+ }
71
90
72
91
for _ , invalid := range invalidMount {
73
92
_ , err := parseMDStat (invalid )
0 commit comments