github.com/Kalvelign/golang-windows-sys-lib@v0.0.0-20221121121202-63da651435e1/unix/fstatfs_zos_test.go (about) 1 // Copyright 2020 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build zos && s390x 6 // +build zos,s390x 7 8 package unix_test 9 10 import ( 11 "os" 12 "testing" 13 "unsafe" 14 15 "golang.org/x/sys/unix" 16 ) 17 18 func TestFstatfs(t *testing.T) { 19 20 wd, err := os.Getwd() 21 if err != nil { 22 t.Fatal(err) 23 } 24 file, err := os.Open(wd) 25 if err != nil { 26 t.Fatal(err) 27 } 28 29 //Query Statfs_t and Statvfs_t from wd, check content 30 var stat unix.Statfs_t 31 err = unix.Fstatfs(int(file.Fd()), &stat) 32 if err != nil { 33 t.Fatal(err) 34 } 35 var stat_v unix.Statvfs_t 36 err = unix.Fstatvfs(int(file.Fd()), &stat_v) 37 if stat.Bsize != stat_v.Bsize || 38 stat.Blocks != stat_v.Blocks || 39 stat.Bfree != stat_v.Bfree || 40 stat.Bavail != stat_v.Bavail || 41 stat.Files != stat_v.Files || 42 stat.Ffree != stat_v.Ffree || 43 stat.Fsid != stat_v.Fsid || 44 stat.Namelen != stat_v.Namemax || 45 stat.Frsize != stat_v.Frsize || 46 stat.Flags != stat_v.Flag { 47 t.Errorf("Mismatching fields in Statfs_t and Statvfs_t.\nStatfs_t = %+v\nStatvfs_t = %+v", stat, stat_v) 48 } 49 50 //Initialize W_Mntent, find corresponding device and check filesystem type 51 var mnt_ent_buffer struct { 52 header unix.W_Mnth 53 filesys_info [128]unix.W_Mntent 54 } 55 var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) 56 var fs_count int = -1 57 for fs_count < 0 { 58 fs_count, err = unix.W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) 59 if err != nil { 60 t.Fatal(err) 61 } 62 for i := 0; i < fs_count; i++ { 63 if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { 64 correct_type := uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) 65 if stat.Type != correct_type { 66 t.Errorf("File system type is 0x%x. Should be 0x%x instead", stat.Type, correct_type) 67 } 68 return 69 } 70 } 71 } 72 73 }