...

Source file src/github.com/tklauser/go-sysconf/sysconf_test.go

Documentation: github.com/tklauser/go-sysconf

     1  // Copyright 2018 Tobias Klauser. 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 darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
     6  // +build darwin dragonfly freebsd linux netbsd openbsd solaris
     7  
     8  package sysconf_test
     9  
    10  import (
    11  	"bytes"
    12  	"os/exec"
    13  	"strconv"
    14  	"strings"
    15  	"testing"
    16  
    17  	"github.com/tklauser/go-sysconf"
    18  )
    19  
    20  func TestSysconf(t *testing.T) {
    21  	// Just test the basic functionality here. The comparison tests against
    22  	// C.sysconf are in the test directory.
    23  	val, err := sysconf.Sysconf(sysconf.SC_CLK_TCK)
    24  	if err != nil {
    25  		t.Fatalf("Sysconf(SC_CLK_TCK): %v", err)
    26  	}
    27  	t.Logf("clock ticks = %v", val)
    28  
    29  	_, err = sysconf.Sysconf(-1)
    30  	if err == nil {
    31  		t.Errorf("Sysconf(-1) returned %v, want non-nil", err)
    32  	}
    33  }
    34  
    35  func TestOpenMax(t *testing.T) {
    36  	openMax, err := sysconf.Sysconf(sysconf.SC_OPEN_MAX)
    37  	if err != nil {
    38  		t.Fatalf("Sysconf(SC_OPEN_MAX): %v", err)
    39  	}
    40  
    41  	// from https://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
    42  	_POSIX_OPEN_MAX := int64(20)
    43  
    44  	// according to sysconf(3), OPEN_MAX must be ≥ _POSIX_OPEN_MAX
    45  	if openMax < _POSIX_OPEN_MAX {
    46  		t.Errorf("Sysconf(SC_OPEN_MAX) (%d) expected to be greater or equal _POSIX_OPEN_MAX (%d)",
    47  			openMax, _POSIX_OPEN_MAX)
    48  	}
    49  }
    50  
    51  func TestGetconf(t *testing.T) {
    52  	testCases := []struct {
    53  		goVar int
    54  		name  string
    55  	}{
    56  		{sysconf.SC_CLK_TCK, "CLK_TCK"},
    57  		{sysconf.SC_HOST_NAME_MAX, "HOST_NAME_MAX"},
    58  		{sysconf.SC_OPEN_MAX, "OPEN_MAX"},
    59  		{sysconf.SC_PAGE_SIZE, "PAGE_SIZE"},
    60  	}
    61  
    62  	getconf, err := exec.LookPath("getconf")
    63  	if err != nil {
    64  		t.Skipf("getconf not found in PATH: %v", err)
    65  	}
    66  
    67  	for _, tc := range testCases {
    68  		cmd := exec.Command(getconf, tc.name)
    69  		var out bytes.Buffer
    70  		cmd.Stdout = &out
    71  		if err := cmd.Run(); err != nil {
    72  			// Ignore getconf errors and skip the test
    73  			t.Skipf("failed to invoke getconf: %v", err)
    74  			break
    75  		}
    76  		want, err := strconv.ParseInt(strings.TrimSpace(out.String()), 10, 64)
    77  		if err != nil {
    78  			t.Errorf("strconv.ParseInt: %v", err)
    79  		}
    80  
    81  		got, err := sysconf.Sysconf(tc.goVar)
    82  		if err != nil {
    83  			t.Errorf("Sysconf(%s/%d): %v", tc.name, tc.goVar, err)
    84  		}
    85  
    86  		if got != want {
    87  			t.Errorf("Sysconf(%v/%d) returned %v, want %v", tc.name, tc.goVar, got, want)
    88  		}
    89  	}
    90  }
    91  

View as plain text