github.com/DARA-Project/GoDist-Scheduler@v0.0.0-20201030134746-668de4acea0d/u-benchmarks/go_vs_dgo/sys_test.go (about)

     1  package main
     2  
     3  import (
     4  	"log"
     5  	"net"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  )
    10  
    11  const textFile = "hello_world.txt"
    12  const ipport = "127.0.0.1:12345"
    13  
    14  func BenchmarkFileOpen(b *testing.B) {
    15  	f := CreateOrDie(textFile)
    16  	f.Close()
    17  	b.ResetTimer()
    18  	for i := 0; i < b.N; i++ {
    19  		os.Open(textFile)
    20  	}
    21  	b.StopTimer()
    22  	RemoveOrDie(textFile)
    23  
    24  }
    25  
    26  func BenchmarkFileRead(b *testing.B) {
    27  	f := CreateOrDie(textFile)
    28  	f.Write([]byte("Hello World\n"))
    29  	f.Close()
    30  	f = OpenOrDie(textFile)
    31  	b1 := make([]byte, 20)
    32  	b.ResetTimer()
    33  	for i := 0; i < b.N; i++ {
    34  		b.StartTimer()
    35  		f.Read(b1)
    36  		b.StopTimer()
    37  		f.Seek(0, 0) // seek to beginning of file
    38  	}
    39  	f.Close()
    40  	RemoveOrDie(textFile)
    41  }
    42  
    43  func BenchmarkFileClose(b *testing.B) {
    44  	f := CreateOrDie(textFile)
    45  	b.ResetTimer()
    46  	for i := 0; i < b.N; i++ {
    47  		f.Close()
    48  		b.StopTimer()
    49  		f = OpenOrDie(textFile)
    50  		b.StartTimer()
    51  	}
    52  	RemoveOrDie(textFile)
    53  }
    54  
    55  func BenchmarkFileWrite_NoRemove(b *testing.B) {
    56  	f := CreateOrDie(textFile)
    57  	b.ResetTimer()
    58  	for i := 0; i < b.N; i++ {
    59  		f.Write([]byte("Hello World\n"))
    60  	}
    61  	b.StopTimer()
    62  	f.Close()
    63  	RemoveOrDie(textFile)
    64  }
    65  
    66  func BenchmarkFileWrite_RemovePerIter(b *testing.B) {
    67  	f := CreateOrDie(textFile)
    68  	b.ResetTimer()
    69  	for i := 0; i < b.N; i++ {
    70  		b.StartTimer()
    71  		f.Write([]byte("Hello World\n"))
    72  		b.StopTimer()
    73  		f.Close()
    74  		RemoveOrDie(textFile)
    75  		f = CreateOrDie(textFile)
    76  	}
    77  	RemoveOrDie(textFile)
    78  }
    79  
    80  func BenchmarkFileFstat(b *testing.B) {
    81  	f := CreateOrDie(textFile)
    82  	b.ResetTimer()
    83  	for i := 0; i < b.N; i++ {
    84  		f.Stat()
    85  	}
    86  	b.StopTimer()
    87  	f.Close()
    88  	RemoveOrDie(textFile)
    89  }
    90  
    91  func BenchmarkFileStat(b *testing.B) {
    92  	f := CreateOrDie(textFile)
    93  	f.Close()
    94  	b.ResetTimer()
    95  	for i := 0; i < b.N; i++ {
    96  		os.Stat(textFile)
    97  	}
    98  	b.StopTimer()
    99  	RemoveOrDie(textFile)
   100  }
   101  
   102  func BenchmarkFileLstat(b *testing.B) {
   103  	f := CreateOrDie(textFile)
   104  	f.Close()
   105  	b.ResetTimer()
   106  	for i := 0; i < b.N; i++ {
   107  		os.Lstat(textFile)
   108  	}
   109  	b.StopTimer()
   110  	RemoveOrDie(textFile)
   111  }
   112  
   113  func BenchmarkFileLseek(b *testing.B) {
   114  	offset := int64(5)
   115  	whence := 0 // offset relative to file origin
   116  	f := CreateOrDie(textFile)
   117  	f.Write([]byte("Hello World\n"))
   118  	b.ResetTimer()
   119  	for i := 0; i < b.N; i++ {
   120  		f.Seek(offset, whence)
   121  	}
   122  	b.StopTimer()
   123  	f.Close()
   124  	RemoveOrDie(textFile)
   125  }
   126  
   127  func BenchmarkFilePread64(b *testing.B) {
   128  	offset := int64(0)
   129  	f := CreateOrDie(textFile)
   130  	f.Write([]byte("Hello World\n"))
   131  	f.Close()
   132  	f = OpenOrDie(textFile)
   133  	buf := make([]byte, 20)
   134  	b.ResetTimer()
   135  	for i := 0; i < b.N; i++ {
   136  		f.ReadAt(buf, offset)
   137  	}
   138  	b.StopTimer()
   139  	RemoveOrDie(textFile)
   140  }
   141  
   142  func BenchmarkFilePwrite64(b *testing.B) {
   143  	offset := int64(5)
   144  	f := CreateOrDie(textFile)
   145  	b.ResetTimer()
   146  	for i := 0; i < b.N; i++ {
   147  		f.WriteAt([]byte("hello_world\n"), offset)
   148  	}
   149  	b.StopTimer()
   150  	f.Close()
   151  	RemoveOrDie(textFile)
   152  }
   153  
   154  func BenchmarkGetpagesize(b *testing.B) {
   155  	for i := 0; i < b.N; i++ {
   156  		os.Getpagesize()
   157  	}
   158  }
   159  
   160  func BenchmarkExecutable(b *testing.B) {
   161  	for i := 0; i < b.N; i++ {
   162  		os.Executable()
   163  	}
   164  }
   165  
   166  func BenchmarkGetpid(b *testing.B) {
   167  	for i := 0; i < b.N; i++ {
   168  		os.Getpid()
   169  	}
   170  }
   171  
   172  func BenchmarkGetppid(b *testing.B) {
   173  	for i := 0; i < b.N; i++ {
   174  		os.Getppid()
   175  	}
   176  }
   177  
   178  func BenchmarkGetwd(b *testing.B) {
   179  	for i := 0; i < b.N; i++ {
   180  		os.Getwd()
   181  	}
   182  }
   183  
   184  func BenchmarkReaddir(b *testing.B) {
   185  	MkdirOrDie("temp")
   186  	CreateOrDie("temp/hello_world.txt")
   187  	f := OpenOrDie("temp")
   188  	b.ResetTimer()
   189  	for i := 0; i < b.N; i++ {
   190  		b.StartTimer()
   191  		f.Readdir(0) // read all files in directory
   192  		b.StopTimer()
   193  		f.Seek(0, 0) // seek to beginning of directory
   194  	}
   195  	RemoveOrDie("temp")
   196  }
   197  
   198  func BenchmarkReaddirnames(b *testing.B) {
   199  	MkdirOrDie("temp")
   200  	CreateOrDie("temp/hello_world.txt")
   201  	f := OpenOrDie("temp")
   202  	b.ResetTimer()
   203  	for i := 0; i < b.N; i++ {
   204  		b.StartTimer()
   205  		f.Readdirnames(0) // read all files in directory
   206  		b.StopTimer()
   207  		f.Seek(0, 0) // seek to beginning of directory
   208  	}
   209  	RemoveOrDie("temp")
   210  }
   211  
   212  func BenchmarkWait4(b *testing.B) {
   213  	// Parameters to start a new process that sleeps forever,
   214  	// so we can reliably kill it.
   215  	argc := "/bin/sleep"
   216  	argv := []string{"infinity"}
   217  	attr := &os.ProcAttr{
   218  		Dir:   "",
   219  		Files: nil,
   220  		Env:   nil,
   221  		Sys:   nil,
   222  	}
   223  	b.ResetTimer()
   224  	b.StopTimer()
   225  	for i := 0; i < b.N; i++ {
   226  		proc, err := os.StartProcess(argc, argv, attr)
   227  		if err != nil {
   228  			log.Fatal(err)
   229  		}
   230  		err = proc.Kill()
   231  		if err != nil {
   232  			log.Fatal(err)
   233  		}
   234  		b.StartTimer()
   235  		proc.Wait()
   236  		b.StopTimer()
   237  	}
   238  }
   239  
   240  func BenchmarkKill(b *testing.B) {
   241  	// Parameters to start a new process that sleeps forever,
   242  	// so we can reliably kill it.
   243  	argc := "/bin/sleep"
   244  	argv := []string{"infinity"}
   245  	attr := &os.ProcAttr{
   246  		Dir:   "",
   247  		Files: nil,
   248  		Env:   nil,
   249  		Sys:   nil,
   250  	}
   251  	b.ResetTimer()
   252  	b.StopTimer()
   253  	for i := 0; i < b.N; i++ {
   254  		proc, err := os.StartProcess(argc, argv, attr)
   255  		if err != nil {
   256  			log.Fatal(err)
   257  		}
   258  		b.StartTimer()
   259  		proc.Kill()
   260  		b.StopTimer()
   261  		// Wait for process to terminate so we don't use up
   262  		// the allotted number of user processes.
   263  		proc.Wait()
   264  	}
   265  }
   266  
   267  func BenchmarkGetuid(b *testing.B) {
   268  	for i := 0; i < b.N; i++ {
   269  		os.Getuid()
   270  	}
   271  }
   272  
   273  func BenchmarkGeteuid(b *testing.B) {
   274  	for i := 0; i < b.N; i++ {
   275  		os.Geteuid()
   276  	}
   277  }
   278  
   279  func BenchmarkGetgid(b *testing.B) {
   280  	for i := 0; i < b.N; i++ {
   281  		os.Getgid()
   282  	}
   283  }
   284  
   285  func BenchmarkGetegid(b *testing.B) {
   286  	for i := 0; i < b.N; i++ {
   287  		os.Getegid()
   288  	}
   289  }
   290  
   291  func BenchmarkGetgroups(b *testing.B) {
   292  	for i := 0; i < b.N; i++ {
   293  		os.Getgroups()
   294  	}
   295  }
   296  
   297  func BenchmarkRename(b *testing.B) {
   298  	f := CreateOrDie(textFile)
   299  	f.Close()
   300  	b.ResetTimer()
   301  	for i := 0; i < b.N; i++ {
   302  		os.Rename(textFile, textFile)
   303  	}
   304  	b.StopTimer()
   305  	RemoveOrDie(textFile)
   306  }
   307  
   308  func BenchmarkTruncate(b *testing.B) {
   309  	f := CreateOrDie(textFile)
   310  	f.Close()
   311  	b.ResetTimer()
   312  	for i := 0; i < b.N; i++ {
   313  		// Truncate file to some arbitrary size.
   314  		os.Truncate(textFile, 12)
   315  	}
   316  	b.StopTimer()
   317  	RemoveOrDie(textFile)
   318  }
   319  
   320  func BenchmarkLink(b *testing.B) {
   321  	f := CreateOrDie(textFile)
   322  	f.Close()
   323  	b.ResetTimer()
   324  	for i := 0; i < b.N; i++ {
   325  		b.StartTimer()
   326  		os.Link(textFile, "new.txt")
   327  		b.StopTimer()
   328  		RemoveOrDie("new.txt")
   329  	}
   330  	RemoveOrDie(textFile)
   331  }
   332  
   333  func BenchmarkSymlink(b *testing.B) {
   334  	f := CreateOrDie(textFile)
   335  	f.Close()
   336  	b.ResetTimer()
   337  	for i := 0; i < b.N; i++ {
   338  		b.StartTimer()
   339  		os.Symlink(textFile, "new.txt")
   340  		b.StopTimer()
   341  		RemoveOrDie("new.txt")
   342  	}
   343  	RemoveOrDie(textFile)
   344  }
   345  
   346  func BenchmarkPipe2(b *testing.B) {
   347  	for i := 0; i < b.N; i++ {
   348  		b.StartTimer()
   349  		r, w, err := os.Pipe()
   350  		b.StopTimer()
   351  		if err != nil {
   352  			log.Fatal(err)
   353  		}
   354  		r.Close()
   355  		w.Close()
   356  	}
   357  }
   358  
   359  func BenchmarkMkdir(b *testing.B) {
   360  	for i := 0; i < b.N; i++ {
   361  		b.StartTimer()
   362  		os.Mkdir("temp", os.ModePerm)
   363  		b.StopTimer()
   364  		RemoveOrDie("temp")
   365  	}
   366  }
   367  
   368  func BenchmarkChdir(b *testing.B) {
   369  	for i := 0; i < b.N; i++ {
   370  		os.Chdir(".")
   371  	}
   372  }
   373  
   374  func BenchmarkUnsetenv(b *testing.B) {
   375  	b.StopTimer()
   376  	for i := 0; i < b.N; i++ {
   377  		err := os.Setenv("new_key", "new_value")
   378  		if err != nil {
   379  			log.Fatal(err)
   380  		}
   381  		b.StartTimer()
   382  		os.Unsetenv("new_key")
   383  		b.StopTimer()
   384  	}
   385  }
   386  
   387  func BenchmarkGetenv(b *testing.B) {
   388  	err := os.Setenv("new_key", "new_value")
   389  	if err != nil {
   390  		log.Fatal(err)
   391  	}
   392  	b.ResetTimer()
   393  	for i := 0; i < b.N; i++ {
   394  		os.Getenv("new_key")
   395  	}
   396  	b.StopTimer()
   397  	err = os.Unsetenv("new_key")
   398  	if err != nil {
   399  		log.Fatal(err)
   400  	}
   401  }
   402  
   403  func BenchmarkSetenv(b *testing.B) {
   404  	for i := 0; i < b.N; i++ {
   405  		b.StartTimer()
   406  		os.Setenv("new_key", "new_value")
   407  		b.StopTimer()
   408  		err := os.Unsetenv("new_key")
   409  		if err != nil {
   410  			log.Fatal(err)
   411  		}
   412  	}
   413  }
   414  
   415  func BenchmarkClearenv(b *testing.B) {
   416  	for i := 0; i < b.N; i++ {
   417  		os.Clearenv()
   418  	}
   419  }
   420  
   421  func BenchmarkEnviron(b *testing.B) {
   422  	for i := 0; i < b.N; i++ {
   423  		os.Environ()
   424  	}
   425  }
   426  
   427  func BenchmarkTimenow(b *testing.B) {
   428  	for i := 0; i < b.N; i++ {
   429  		time.Now()
   430  	}
   431  }
   432  
   433  func BenchmarkReadlink(b *testing.B) {
   434  	f := CreateOrDie(textFile)
   435  	f.Close()
   436  	err := os.Symlink(textFile, "link.txt")
   437  	if err != nil {
   438  		log.Fatal(err)
   439  	}
   440  	b.ResetTimer()
   441  	for i := 0; i < b.N; i++ {
   442  		os.Readlink("link.txt")
   443  	}
   444  	b.StopTimer()
   445  	RemoveOrDie("link.txt")
   446  	RemoveOrDie(textFile)
   447  }
   448  
   449  func BenchmarkChmod(b *testing.B) {
   450  	f := CreateOrDie(textFile)
   451  	f.Close()
   452  	b.ResetTimer()
   453  	for i := 0; i < b.N; i++ {
   454  		os.Chmod(textFile, os.ModePerm)
   455  	}
   456  	b.StopTimer()
   457  	RemoveOrDie(textFile)
   458  }
   459  
   460  func BenchmarkFchmod(b *testing.B) {
   461  	f := CreateOrDie(textFile)
   462  	b.ResetTimer()
   463  	for i := 0; i < b.N; i++ {
   464  		f.Chmod(os.ModePerm)
   465  	}
   466  	b.StopTimer()
   467  	f.Close()
   468  	RemoveOrDie(textFile)
   469  }
   470  
   471  func BenchmarkChown(b *testing.B) {
   472  	uid := os.Getuid()
   473  	gid := os.Getgid()
   474  	f := CreateOrDie(textFile)
   475  	f.Close()
   476  	b.ResetTimer()
   477  	for i := 0; i < b.N; i++ {
   478  		os.Chown(textFile, uid, gid)
   479  	}
   480  	b.StopTimer()
   481  	RemoveOrDie(textFile)
   482  }
   483  
   484  func BenchmarkLchown(b *testing.B) {
   485  	uid := os.Getuid()
   486  	gid := os.Getgid()
   487  	f := CreateOrDie(textFile)
   488  	f.Close()
   489  	b.ResetTimer()
   490  	for i := 0; i < b.N; i++ {
   491  		os.Lchown(textFile, uid, gid)
   492  	}
   493  	b.StopTimer()
   494  	RemoveOrDie(textFile)
   495  }
   496  
   497  func BenchmarkFchown(b *testing.B) {
   498  	uid := os.Getuid()
   499  	gid := os.Getgid()
   500  	f := CreateOrDie(textFile)
   501  	b.ResetTimer()
   502  	for i := 0; i < b.N; i++ {
   503  		f.Chown(uid, gid)
   504  	}
   505  	b.StopTimer()
   506  	f.Close()
   507  	RemoveOrDie(textFile)
   508  }
   509  
   510  func BenchmarkFtruncate(b *testing.B) {
   511  	f := CreateOrDie(textFile)
   512  	b.ResetTimer()
   513  	for i := 0; i < b.N; i++ {
   514  		f.Truncate(10)
   515  	}
   516  	b.StopTimer()
   517  	f.Close()
   518  	RemoveOrDie(textFile)
   519  }
   520  
   521  func BenchmarkFsync(b *testing.B) {
   522  	f := CreateOrDie(textFile)
   523  	b.ResetTimer()
   524  	for i := 0; i < b.N; i++ {
   525  		f.Sync()
   526  	}
   527  	b.StopTimer()
   528  	f.Close()
   529  	RemoveOrDie(textFile)
   530  }
   531  
   532  func BenchmarkUtimes(b *testing.B) {
   533  	now := time.Now()
   534  	f := CreateOrDie(textFile)
   535  	f.Close()
   536  	b.ResetTimer()
   537  	for i := 0; i < b.N; i++ {
   538  		os.Chtimes(textFile, now, now)
   539  	}
   540  	b.StopTimer()
   541  	RemoveOrDie(textFile)
   542  }
   543  
   544  func BenchmarkFchdir(b *testing.B) {
   545  	f := CreateOrDie(textFile)
   546  	b.ResetTimer()
   547  	for i := 0; i < b.N; i++ {
   548  		f.Chdir()
   549  	}
   550  	b.StopTimer()
   551  	RemoveOrDie(textFile)
   552  }
   553  
   554  func BenchmarkSetDeadline(b *testing.B) {
   555  	now := time.Now()
   556  	r, w, err := os.Pipe()
   557  	if err != nil {
   558  		log.Fatal(err)
   559  	}
   560  	b.ResetTimer()
   561  	for i := 0; i < b.N; i++ {
   562  		r.SetDeadline(now)
   563  	}
   564  	b.StopTimer()
   565  	r.Close()
   566  	w.Close()
   567  }
   568  
   569  func BenchmarkSetReadDeadline(b *testing.B) {
   570  	now := time.Now()
   571  	r, w, err := os.Pipe()
   572  	if err != nil {
   573  		log.Fatal(err)
   574  	}
   575  	b.ResetTimer()
   576  	for i := 0; i < b.N; i++ {
   577  		r.SetReadDeadline(now)
   578  	}
   579  	b.StopTimer()
   580  	r.Close()
   581  	w.Close()
   582  }
   583  
   584  func BenchmarkSetWriteDeadline(b *testing.B) {
   585  	now := time.Now()
   586  	r, w, err := os.Pipe()
   587  	if err != nil {
   588  		log.Fatal(err)
   589  	}
   590  	b.ResetTimer()
   591  	for i := 0; i < b.N; i++ {
   592  		w.SetWriteDeadline(now)
   593  	}
   594  	b.StopTimer()
   595  	r.Close()
   596  	w.Close()
   597  }
   598  
   599  func BenchmarkNetRead(b *testing.B) {
   600  	serverConn, clientConn := GenerateTCPConnPair()
   601  	buf := make([]byte, 20)
   602  	b.ResetTimer()
   603  	b.StopTimer()
   604  	for i := 0; i < b.N; i++ {
   605  		serverConn.Write([]byte("hello world\n"))
   606  		b.StartTimer()
   607  		clientConn.Read(buf)
   608  		b.StopTimer()
   609  	}
   610  	serverConn.Close()
   611  	clientConn.Close()
   612  }
   613  
   614  func BenchmarkNetWrite(b *testing.B) {
   615  	serverConn, clientConn := GenerateTCPConnPair()
   616  	buf := make([]byte, 20)
   617  	b.ResetTimer()
   618  	for i := 0; i < b.N; i++ {
   619  		b.StartTimer()
   620  		clientConn.Write([]byte("hello world\n"))
   621  		b.StopTimer()
   622  		serverConn.Read(buf)
   623  	}
   624  	serverConn.Close()
   625  	clientConn.Close()
   626  }
   627  
   628  func BenchmarkNetClose(b *testing.B) {
   629  	b.StopTimer()
   630  	for i := 0; i < b.N; i++ {
   631  		serverConn, clientConn := GenerateTCPConnPair()
   632  		b.StartTimer()
   633  		clientConn.Close()
   634  		b.StopTimer()
   635  		serverConn.Close()
   636  	}
   637  }
   638  
   639  func BenchmarkNetSetDeadline(b *testing.B) {
   640  	t := time.Now()
   641  	serverConn, clientConn := GenerateTCPConnPair()
   642  	b.ResetTimer()
   643  	for i := 0; i < b.N; i++ {
   644  		clientConn.SetDeadline(t)
   645  	}
   646  	b.StopTimer()
   647  	serverConn.Close()
   648  	clientConn.Close()
   649  }
   650  
   651  func BenchmarkNetSetReadDeadline(b *testing.B) {
   652  	t := time.Now()
   653  	serverConn, clientConn := GenerateTCPConnPair()
   654  	b.ResetTimer()
   655  	for i := 0; i < b.N; i++ {
   656  		clientConn.SetReadDeadline(t)
   657  	}
   658  	b.StopTimer()
   659  	serverConn.Close()
   660  	clientConn.Close()
   661  }
   662  
   663  func BenchmarkNetSetWriteDeadline(b *testing.B) {
   664  	t := time.Now()
   665  	serverConn, clientConn := GenerateTCPConnPair()
   666  	b.ResetTimer()
   667  	for i := 0; i < b.N; i++ {
   668  		clientConn.SetWriteDeadline(t)
   669  	}
   670  	b.StopTimer()
   671  	serverConn.Close()
   672  	clientConn.Close()
   673  }
   674  
   675  func BenchmarkNetSetReadBuffer(b *testing.B) {
   676  	serverConn, clientConn := GenerateTCPConnPair()
   677  	b.ResetTimer()
   678  	for i := 0; i < b.N; i++ {
   679  		clientConn.SetReadBuffer(100)
   680  	}
   681  	b.StopTimer()
   682  	serverConn.Close()
   683  	clientConn.Close()
   684  }
   685  
   686  func BenchmarkNetSetWriteBuffer(b *testing.B) {
   687  	serverConn, clientConn := GenerateTCPConnPair()
   688  	b.ResetTimer()
   689  	for i := 0; i < b.N; i++ {
   690  		clientConn.SetWriteBuffer(100)
   691  	}
   692  	b.StopTimer()
   693  	serverConn.Close()
   694  	clientConn.Close()
   695  }
   696  
   697  func BenchmarkSocket(b *testing.B) {
   698  	addr, err := net.ResolveTCPAddr("tcp", ipport)
   699  	if err != nil {
   700  		log.Fatal(err)
   701  	}
   702  	listener, err := net.ListenTCP("tcp", addr)
   703  	if err != nil {
   704  		log.Fatal(err)
   705  	}
   706  	b.ResetTimer()
   707  	for i := 0; i < b.N; i++ {
   708  		b.StartTimer()
   709  		clientConn, err := net.DialTCP("tcp", nil, addr)
   710  		b.StopTimer()
   711  		if err != nil {
   712  			log.Fatal(err)
   713  		}
   714  		serverConn, err := listener.AcceptTCP()
   715  		if err != nil {
   716  			log.Fatal(err)
   717  		}
   718  		serverConn.Close()
   719  		clientConn.Close()
   720  	}
   721  	listener.Close()
   722  }
   723  
   724  func BenchmarkListenTCP(b *testing.B) {
   725  	addr, err := net.ResolveTCPAddr("tcp", ipport)
   726  	if err != nil {
   727  		log.Fatal(err)
   728  	}
   729  	b.ResetTimer()
   730  	for i := 0; i < b.N; i++ {
   731  		b.StartTimer()
   732  		listener, err := net.ListenTCP("tcp", addr)
   733  		b.StopTimer()
   734  		if err != nil {
   735  			log.Fatal(err)
   736  		}
   737  		listener.Close()
   738  	}
   739  
   740  }
   741  
   742  // Helpers to reduce boilerplate code
   743  
   744  func MkdirOrDie(name string) {
   745  	err := os.MkdirAll(name, os.ModePerm)
   746  	if err != nil {
   747  		log.Fatal(err)
   748  	}
   749  }
   750  
   751  func CreateOrDie(name string) *os.File {
   752  	f, err := os.Create(name)
   753  	if err != nil {
   754  		log.Fatal(err)
   755  	}
   756  	return f
   757  }
   758  
   759  func OpenOrDie(name string) *os.File {
   760  	f, err := os.Open(name)
   761  	if err != nil {
   762  		log.Fatal(err)
   763  	}
   764  	return f
   765  }
   766  
   767  func RemoveOrDie(name string) {
   768  	err := os.RemoveAll(name)
   769  	if err != nil {
   770  		log.Fatal(err)
   771  	}
   772  }
   773  
   774  func GenerateTCPConnPair() (*net.TCPConn, *net.TCPConn) {
   775  	addr, err := net.ResolveTCPAddr("tcp", ipport)
   776  	if err != nil {
   777  		log.Fatal(err)
   778  	}
   779  	listener, err := net.ListenTCP("tcp", addr)
   780  	if err != nil {
   781  		log.Fatal(err)
   782  	}
   783  	defer listener.Close()
   784  	clientConn, err := net.DialTCP("tcp", nil, addr)
   785  	if err != nil {
   786  		log.Fatal(err)
   787  	}
   788  	serverConn, err := listener.AcceptTCP()
   789  	if err != nil {
   790  		log.Fatal(err)
   791  	}
   792  	return serverConn, clientConn
   793  }