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 }