github.com/PandaGoAdmin/utils@v0.0.0-20211208134815-d5461603a00f/os_test.go (about)

     1  package kgo
     2  
     3  import (
     4  	"encoding/binary"
     5  	"github.com/stretchr/testify/assert"
     6  	"net"
     7  	"net/http"
     8  	"os/user"
     9  	"strings"
    10  	"testing"
    11  )
    12  
    13  func TestOS_Pwd(t *testing.T) {
    14  	res := KOS.Pwd()
    15  	assert.NotEmpty(t, res)
    16  }
    17  
    18  func BenchmarkOS_Pwd(b *testing.B) {
    19  	b.ResetTimer()
    20  	for i := 0; i < b.N; i++ {
    21  		KOS.Pwd()
    22  	}
    23  }
    24  
    25  func TestOS_Getcwd_Chdir(t *testing.T) {
    26  	var ori, res string
    27  	var err error
    28  
    29  	ori, err = KOS.Getcwd()
    30  	assert.Nil(t, err)
    31  	assert.NotEmpty(t, ori)
    32  
    33  	//切换目录
    34  	err = KOS.Chdir(dirTdat)
    35  	assert.Nil(t, err)
    36  
    37  	res, err = KOS.Getcwd()
    38  	assert.Nil(t, err)
    39  
    40  	//返回原来目录
    41  	err = KOS.Chdir(ori)
    42  	assert.Nil(t, err)
    43  	assert.Equal(t, KFile.AbsPath(res), KFile.AbsPath(dirTdat))
    44  }
    45  
    46  func BenchmarkOS_Getcwd(b *testing.B) {
    47  	b.ResetTimer()
    48  	for i := 0; i < b.N; i++ {
    49  		_, _ = KOS.Getcwd()
    50  	}
    51  }
    52  
    53  func BenchmarkOS_Chdir(b *testing.B) {
    54  	b.ResetTimer()
    55  	dir := KOS.Pwd()
    56  	for i := 0; i < b.N; i++ {
    57  		_ = KOS.Chdir(dir)
    58  	}
    59  }
    60  
    61  func TestOS_LocalIP(t *testing.T) {
    62  	res, err := KOS.LocalIP()
    63  	assert.Nil(t, err)
    64  	assert.NotEmpty(t, res)
    65  }
    66  
    67  func BenchmarkOS_LocalIP(b *testing.B) {
    68  	b.ResetTimer()
    69  	for i := 0; i < b.N; i++ {
    70  		_, _ = KOS.LocalIP()
    71  	}
    72  }
    73  
    74  func TestOS_OutboundIP(t *testing.T) {
    75  	res, err := KOS.OutboundIP()
    76  	assert.Nil(t, err)
    77  	assert.NotEmpty(t, res)
    78  }
    79  
    80  func BenchmarkOS_OutboundIP(b *testing.B) {
    81  	b.ResetTimer()
    82  	for i := 0; i < b.N; i++ {
    83  		_, _ = KOS.OutboundIP()
    84  	}
    85  }
    86  
    87  func TestOS_IsPrivateIp(t *testing.T) {
    88  	var res bool
    89  	var err error
    90  
    91  	res, err = KOS.IsPrivateIp(lanIp)
    92  	assert.Nil(t, err)
    93  	assert.True(t, res)
    94  
    95  	res, err = KOS.IsPrivateIp(publicIp2)
    96  	assert.Nil(t, err)
    97  	assert.False(t, res)
    98  
    99  	//非IP
   100  	res, err = KOS.IsPrivateIp(strHello)
   101  	assert.NotNil(t, err)
   102  }
   103  
   104  func BenchmarkOS_IsPrivateIp(b *testing.B) {
   105  	b.ResetTimer()
   106  	for i := 0; i < b.N; i++ {
   107  		_, _ = KOS.IsPrivateIp(lanIp)
   108  	}
   109  }
   110  
   111  func TestOS_IsPublicIP(t *testing.T) {
   112  	var res bool
   113  	var err error
   114  
   115  	res, err = KOS.IsPublicIP(localIp)
   116  	assert.Nil(t, err)
   117  	assert.False(t, res)
   118  
   119  	res, err = KOS.IsPublicIP(lanIp)
   120  	assert.Nil(t, err)
   121  	assert.False(t, res)
   122  
   123  	res, err = KOS.IsPublicIP(googleIpv4)
   124  	assert.Nil(t, err)
   125  	assert.True(t, res)
   126  
   127  	res, err = KOS.IsPublicIP(googleIpv6)
   128  	assert.Nil(t, err)
   129  	assert.True(t, res)
   130  
   131  	//非IP
   132  	res, err = KOS.IsPublicIP(strHello)
   133  	assert.NotNil(t, err)
   134  }
   135  
   136  func BenchmarkOS_IsPublicIP(b *testing.B) {
   137  	b.ResetTimer()
   138  	for i := 0; i < b.N; i++ {
   139  		_, _ = KOS.IsPublicIP(publicIp1)
   140  	}
   141  }
   142  
   143  func TestOS_GetIPs(t *testing.T) {
   144  	res := KOS.GetIPs()
   145  	assert.NotEmpty(t, res)
   146  }
   147  
   148  func BenchmarkOS_GetIPs(b *testing.B) {
   149  	b.ResetTimer()
   150  	for i := 0; i < b.N; i++ {
   151  		KOS.GetIPs()
   152  	}
   153  }
   154  
   155  func TestOS_GetMacAddrs(t *testing.T) {
   156  	res := KOS.GetMacAddrs()
   157  	assert.NotEmpty(t, res)
   158  }
   159  
   160  func BenchmarkOS_GetMacAddrs(b *testing.B) {
   161  	b.ResetTimer()
   162  	for i := 0; i < b.N; i++ {
   163  		KOS.GetMacAddrs()
   164  	}
   165  }
   166  
   167  func TestOS_Hostname_GetIpByHostname(t *testing.T) {
   168  	var res string
   169  	var err error
   170  
   171  	res, err = KOS.Hostname()
   172  	assert.Nil(t, err)
   173  	assert.NotEmpty(t, res)
   174  
   175  	res, err = KOS.GetIpByHostname(res)
   176  	assert.Nil(t, err)
   177  	assert.NotEmpty(t, res)
   178  
   179  	res, err = KOS.GetIpByHostname(tesIp2)
   180  	assert.Empty(t, res)
   181  
   182  	res, err = KOS.GetIpByHostname(strHello)
   183  	assert.NotNil(t, err)
   184  }
   185  
   186  func BenchmarkOS_Hostname(b *testing.B) {
   187  	b.ResetTimer()
   188  	for i := 0; i < b.N; i++ {
   189  		_, _ = KOS.Hostname()
   190  	}
   191  }
   192  
   193  func BenchmarkOS_GetIpByHostname(b *testing.B) {
   194  	b.ResetTimer()
   195  	host, _ := KOS.Hostname()
   196  	for i := 0; i < b.N; i++ {
   197  		_, _ = KOS.GetIpByHostname(host)
   198  	}
   199  }
   200  
   201  func TestOS_GetIpsByDomain(t *testing.T) {
   202  	var res []string
   203  	var err error
   204  
   205  	res, err = KOS.GetIpsByDomain(tesDomain30)
   206  	assert.Nil(t, err)
   207  	assert.NotEmpty(t, res)
   208  
   209  	res, err = KOS.GetIpsByDomain(strHello)
   210  	assert.NotNil(t, err)
   211  }
   212  
   213  func BenchmarkOS_GetIpsByDomain(b *testing.B) {
   214  	b.ResetTimer()
   215  	for i := 0; i < b.N; i++ {
   216  		_, _ = KOS.GetIpsByDomain(tesDomain30)
   217  	}
   218  }
   219  
   220  func TestOS_GetHostByIp(t *testing.T) {
   221  	var res string
   222  	var err error
   223  
   224  	res, err = KOS.GetHostByIp(localIp)
   225  	assert.Nil(t, err)
   226  	assert.NotEmpty(t, res)
   227  
   228  	res, err = KOS.GetHostByIp(strHello)
   229  	assert.NotNil(t, err)
   230  	assert.Empty(t, res)
   231  }
   232  
   233  func BenchmarkOS_GetHostByIp(b *testing.B) {
   234  	b.ResetTimer()
   235  	for i := 0; i < b.N; i++ {
   236  		_, _ = KOS.GetHostByIp(localIp)
   237  	}
   238  }
   239  
   240  func TestOS_Setenv_Getenv_Unsetenv(t *testing.T) {
   241  	var res string
   242  	var err error
   243  
   244  	err = KOS.Setenv(helloEngICase, helloOther)
   245  	assert.Nil(t, err)
   246  
   247  	res = KOS.Getenv(helloEngICase)
   248  	assert.Equal(t, res, helloOther)
   249  
   250  	err = KOS.Unsetenv(helloEngICase)
   251  	assert.Nil(t, err)
   252  
   253  	res = KOS.Getenv(helloEngICase, helloOther2)
   254  	assert.Equal(t, res, helloOther2)
   255  }
   256  
   257  func BenchmarkOS_Setenv(b *testing.B) {
   258  	b.ResetTimer()
   259  	for i := 0; i < b.N; i++ {
   260  		_ = KOS.Setenv(helloEngICase, helloOther)
   261  	}
   262  }
   263  
   264  func BenchmarkOS_Getenv(b *testing.B) {
   265  	b.ResetTimer()
   266  	for i := 0; i < b.N; i++ {
   267  		KOS.Getenv(helloEngICase)
   268  	}
   269  }
   270  
   271  func BenchmarkOS_Unsetenv(b *testing.B) {
   272  	b.ResetTimer()
   273  	for i := 0; i < b.N; i++ {
   274  		_ = KOS.Unsetenv(helloEngICase)
   275  	}
   276  }
   277  
   278  func TestOS_GetEndian_IsLittleEndian(t *testing.T) {
   279  	res := KOS.GetEndian()
   280  	chk := KOS.IsLittleEndian()
   281  	if chk {
   282  		assert.Equal(t, res, binary.LittleEndian)
   283  	} else {
   284  		assert.Equal(t, res, binary.BigEndian)
   285  	}
   286  }
   287  
   288  func BenchmarkOS_GetEndian(b *testing.B) {
   289  	b.ResetTimer()
   290  	for i := 0; i < b.N; i++ {
   291  		KOS.GetEndian()
   292  	}
   293  }
   294  
   295  func BenchmarkOS_IsLittleEndian(b *testing.B) {
   296  	b.ResetTimer()
   297  	for i := 0; i < b.N; i++ {
   298  		KOS.IsLittleEndian()
   299  	}
   300  }
   301  
   302  func TestOS_Chmod_Chown(t *testing.T) {
   303  	var res bool
   304  
   305  	KFile.Touch(chownfile, 128)
   306  	res = KOS.Chmod(chownfile, 0777)
   307  	assert.True(t, res)
   308  
   309  	usr, _ := user.Current()
   310  	uid := toInt(usr.Uid)
   311  	guid := toInt(usr.Gid)
   312  	res = KOS.Chown(chownfile, uid, guid)
   313  	if KOS.IsWindows() {
   314  		assert.False(t, res)
   315  	} else {
   316  		assert.True(t, res)
   317  	}
   318  }
   319  
   320  func BenchmarkOS_Chmod(b *testing.B) {
   321  	b.ResetTimer()
   322  	for i := 0; i < b.N; i++ {
   323  		KOS.Chmod(dirDoc, 0777)
   324  	}
   325  }
   326  
   327  func BenchmarkOS_Chown(b *testing.B) {
   328  	b.ResetTimer()
   329  	usr, _ := user.Current()
   330  	uid := toInt(usr.Uid)
   331  	guid := toInt(usr.Gid)
   332  	for i := 0; i < b.N; i++ {
   333  		KOS.Chown(dirDoc, uid, guid)
   334  	}
   335  }
   336  
   337  func TestOS_GetTempDir(t *testing.T) {
   338  	res := KOS.GetTempDir()
   339  	assert.NotEmpty(t, res)
   340  }
   341  
   342  func BenchmarkOS_GetTempDir(b *testing.B) {
   343  	b.ResetTimer()
   344  	for i := 0; i < b.N; i++ {
   345  		KOS.GetTempDir()
   346  	}
   347  }
   348  
   349  func TestOS_ClientIp(t *testing.T) {
   350  	// Create type and function for testing
   351  	type testIP struct {
   352  		name     string
   353  		request  *http.Request
   354  		expected string
   355  	}
   356  
   357  	newRequest := func(remoteAddr, xRealIP string, xForwardedFor ...string) *http.Request {
   358  		h := http.Header{}
   359  		h.Set("X-Real-IP", xRealIP)
   360  		for _, address := range xForwardedFor {
   361  			h.Set("X-Forwarded-For", address)
   362  		}
   363  
   364  		return &http.Request{
   365  			RemoteAddr: remoteAddr,
   366  			Header:     h,
   367  		}
   368  	}
   369  
   370  	// Create test data
   371  	testData := []testIP{
   372  		{
   373  			name:     "No header,no port",
   374  			request:  newRequest(publicIp1, ""),
   375  			expected: publicIp1,
   376  		}, {
   377  			name:     "No header,has port",
   378  			request:  newRequest(tesIp8, ""),
   379  			expected: tesIp8,
   380  		}, {
   381  			name:     "Has X-Forwarded-For",
   382  			request:  newRequest("", "", publicIp1),
   383  			expected: publicIp1,
   384  		}, {
   385  			name:     "Has multiple X-Forwarded-For",
   386  			request:  newRequest("", "", localIp, publicIp1, publicIp2),
   387  			expected: publicIp2,
   388  		}, {
   389  			name:     "Has X-Real-IP",
   390  			request:  newRequest("", publicIp1),
   391  			expected: publicIp1,
   392  		}, {
   393  			name:     "Local ip",
   394  			request:  newRequest("", tesIp2),
   395  			expected: tesIp2,
   396  		},
   397  	}
   398  
   399  	// Run test
   400  	var actual string
   401  	for _, v := range testData {
   402  		actual = KOS.ClientIp(v.request)
   403  		if v.expected == "::1" {
   404  			assert.Equal(t, actual, localIp)
   405  		} else {
   406  			if strings.Contains(v.expected, ":") {
   407  				ip, _, _ := net.SplitHostPort(v.expected)
   408  				assert.Equal(t, actual, ip)
   409  			} else {
   410  				assert.Equal(t, actual, v.expected)
   411  			}
   412  		}
   413  	}
   414  }
   415  
   416  func BenchmarkOS_ClientIp(b *testing.B) {
   417  	b.ResetTimer()
   418  	req := &http.Request{
   419  		RemoteAddr: baiduIpv4,
   420  	}
   421  	for i := 0; i < b.N; i++ {
   422  		KOS.ClientIp(req)
   423  	}
   424  }
   425  
   426  func TestOS_IsPortOpen(t *testing.T) {
   427  	var tests = []struct {
   428  		host     string
   429  		port     interface{}
   430  		protocol string
   431  		expected bool
   432  	}{
   433  		{"", 23, "", false},
   434  		{localHost, 0, "", false},
   435  		{localIp, 23, "", false},
   436  		{tesDomain31, 80, "udp", true},
   437  		{tesDomain31, 80, "tcp", true},
   438  		{tesDomain32, "443", "tcp", true},
   439  	}
   440  	for _, test := range tests {
   441  		actual := KOS.IsPortOpen(test.host, test.port, test.protocol)
   442  		assert.Equal(t, actual, test.expected)
   443  	}
   444  
   445  	//默认协议
   446  	chk := KOS.IsPortOpen(lanIp, 80)
   447  	assert.False(t, chk)
   448  }
   449  
   450  func BenchmarkOS_IsPortOpen(b *testing.B) {
   451  	b.ResetTimer()
   452  	for i := 0; i < b.N; i++ {
   453  		KOS.IsPortOpen(localIp, 80, "tcp")
   454  	}
   455  }
   456  
   457  func TestOS_ForceGC(t *testing.T) {
   458  	KOS.ForceGC()
   459  }
   460  
   461  func BenchmarkOS_ForceGC(b *testing.B) {
   462  	b.ResetTimer()
   463  	for i := 0; i < b.N; i++ {
   464  		KOS.ForceGC()
   465  	}
   466  }
   467  
   468  func TestOS_TriggerGC(t *testing.T) {
   469  	KOS.TriggerGC()
   470  }
   471  
   472  func BenchmarkOS_TriggerGC(b *testing.B) {
   473  	b.ResetTimer()
   474  	for i := 0; i < b.N; i++ {
   475  		KOS.TriggerGC()
   476  	}
   477  }
   478  
   479  func TestOS_GoMemory(t *testing.T) {
   480  	res := KOS.GoMemory()
   481  	assert.Greater(t, int(res), 1)
   482  }
   483  
   484  func BenchmarkOS_GoMemory(b *testing.B) {
   485  	b.ResetTimer()
   486  	for i := 0; i < b.N; i++ {
   487  		KOS.GoMemory()
   488  	}
   489  }
   490  
   491  func TestOS_GetSystemInfo(t *testing.T) {
   492  	res := KOS.GetSystemInfo()
   493  	assert.NotNil(t, res)
   494  }
   495  
   496  func BenchmarkOS_GetSystemInfo(b *testing.B) {
   497  	b.ResetTimer()
   498  	for i := 0; i < b.N; i++ {
   499  		KOS.GetSystemInfo()
   500  	}
   501  }