...

Source file src/github.com/shirou/gopsutil/disk/disk_test.go

Documentation: github.com/shirou/gopsutil/disk

     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  // https://github.com/shirou/gopsutil/issues/560 regression test
    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