1 package disk
2
3 import (
4 "fmt"
5 "runtime"
6 "sync"
7 "testing"
8
9 "github.com/shirou/gopsutil/internal/common"
10 )
11
12 func skipIfNotImplementedErr(t *testing.T, err error) {
13 if err == common.ErrNotImplementedError {
14 t.Skip("not implemented")
15 }
16 }
17
18 func TestDisk_usage(t *testing.T) {
19 path := "/"
20 if runtime.GOOS == "windows" {
21 path = "C:"
22 }
23 v, err := Usage(path)
24 skipIfNotImplementedErr(t, err)
25 if err != nil {
26 t.Errorf("error %v", err)
27 }
28 if v.Path != path {
29 t.Errorf("error %v", err)
30 }
31 }
32
33 func TestDisk_partitions(t *testing.T) {
34 ret, err := Partitions(false)
35 skipIfNotImplementedErr(t, err)
36 if err != nil || len(ret) == 0 {
37 t.Errorf("error %v", err)
38 }
39 t.Log(ret)
40
41 empty := PartitionStat{}
42 if len(ret) == 0 {
43 t.Errorf("ret is empty")
44 }
45 for _, disk := range ret {
46 if disk == empty {
47 t.Errorf("Could not get device info %v", disk)
48 }
49 }
50 }
51
52 func TestDisk_io_counters(t *testing.T) {
53 ret, err := IOCounters()
54 skipIfNotImplementedErr(t, err)
55 if err != nil {
56 t.Errorf("error %v", err)
57 }
58 if len(ret) == 0 {
59 t.Errorf("ret is empty")
60 }
61 empty := IOCountersStat{}
62 for part, io := range ret {
63 t.Log(part, io)
64 if io == empty {
65 t.Errorf("io_counter error %v, %v", part, io)
66 }
67 }
68 }
69
70
71 func TestDisk_io_counters_concurrency_on_darwin_cgo(t *testing.T) {
72 if runtime.GOOS != "darwin" {
73 t.Skip("darwin only")
74 }
75 var wg sync.WaitGroup
76 const max = 1000
77 for i := 1; i < max; i++ {
78 wg.Add(1)
79 go func() {
80 defer wg.Done()
81 IOCounters()
82 }()
83 }
84 wg.Wait()
85 }
86
87 func TestDiskUsageStat_String(t *testing.T) {
88 v := UsageStat{
89 Path: "/",
90 Total: 1000,
91 Free: 2000,
92 Used: 3000,
93 UsedPercent: 50.1,
94 InodesTotal: 4000,
95 InodesUsed: 5000,
96 InodesFree: 6000,
97 InodesUsedPercent: 49.1,
98 Fstype: "ext4",
99 }
100 e := `{"path":"/","fstype":"ext4","total":1000,"free":2000,"used":3000,"usedPercent":50.1,"inodesTotal":4000,"inodesUsed":5000,"inodesFree":6000,"inodesUsedPercent":49.1}`
101 if e != fmt.Sprintf("%v", v) {
102 t.Errorf("DiskUsageStat string is invalid: %v", v)
103 }
104 }
105
106 func TestDiskPartitionStat_String(t *testing.T) {
107 v := PartitionStat{
108 Device: "sd01",
109 Mountpoint: "/",
110 Fstype: "ext4",
111 Opts: "ro",
112 }
113 e := `{"device":"sd01","mountpoint":"/","fstype":"ext4","opts":"ro"}`
114 if e != fmt.Sprintf("%v", v) {
115 t.Errorf("DiskUsageStat string is invalid: %v", v)
116 }
117 }
118
119 func TestDiskIOCountersStat_String(t *testing.T) {
120 v := IOCountersStat{
121 Name: "sd01",
122 ReadCount: 100,
123 WriteCount: 200,
124 ReadBytes: 300,
125 WriteBytes: 400,
126 SerialNumber: "SERIAL",
127 }
128 e := `{"readCount":100,"mergedReadCount":0,"writeCount":200,"mergedWriteCount":0,"readBytes":300,"writeBytes":400,"readTime":0,"writeTime":0,"iopsInProgress":0,"ioTime":0,"weightedIO":0,"name":"sd01","serialNumber":"SERIAL","label":""}`
129 if e != fmt.Sprintf("%v", v) {
130 t.Errorf("DiskUsageStat string is invalid: %v", v)
131 }
132 }
133
View as plain text