| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build zos && s390x |
| // +build zos,s390x |
| |
| package unix_test |
| |
| import ( |
| "os" |
| "testing" |
| "unsafe" |
| |
| "golang.org/x/sys/unix" |
| ) |
| |
| func TestFstatfs(t *testing.T) { |
| |
| wd, err := os.Getwd() |
| if err != nil { |
| t.Fatal(err) |
| } |
| file, err := os.Open(wd) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| //Query Statfs_t and Statvfs_t from wd, check content |
| var stat unix.Statfs_t |
| err = unix.Fstatfs(int(file.Fd()), &stat) |
| if err != nil { |
| t.Fatal(err) |
| } |
| var stat_v unix.Statvfs_t |
| err = unix.Fstatvfs(int(file.Fd()), &stat_v) |
| if stat.Bsize != stat_v.Bsize || |
| stat.Blocks != stat_v.Blocks || |
| stat.Bfree != stat_v.Bfree || |
| stat.Bavail != stat_v.Bavail || |
| stat.Files != stat_v.Files || |
| stat.Ffree != stat_v.Ffree || |
| stat.Fsid != stat_v.Fsid || |
| stat.Namelen != stat_v.Namemax || |
| stat.Frsize != stat_v.Frsize || |
| stat.Flags != stat_v.Flag { |
| t.Errorf("Mismatching fields in Statfs_t and Statvfs_t.\nStatfs_t = %+v\nStatvfs_t = %+v", stat, stat_v) |
| } |
| |
| //Initialize W_Mntent, find corresponding device and check filesystem type |
| var mnt_ent_buffer struct { |
| header unix.W_Mnth |
| filesys_info [128]unix.W_Mntent |
| } |
| var buffer_size int = int(unsafe.Sizeof(mnt_ent_buffer)) |
| var fs_count int = -1 |
| for fs_count < 0 { |
| fs_count, err = unix.W_Getmntent((*byte)(unsafe.Pointer(&mnt_ent_buffer)), buffer_size) |
| if err != nil { |
| t.Fatal(err) |
| } |
| for i := 0; i < fs_count; i++ { |
| if stat.Fsid == uint64(mnt_ent_buffer.filesys_info[i].Dev) { |
| correct_type := uint32(mnt_ent_buffer.filesys_info[i].Fstname[0]) |
| if stat.Type != correct_type { |
| t.Errorf("File system type is 0x%x. Should be 0x%x instead", stat.Type, correct_type) |
| } |
| return |
| } |
| } |
| } |
| |
| } |