github.com/HACKERALERT/Picocrypt/src/external/sys@v0.0.0-20210609020157-e519952f829f/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  }