github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/testutil/file.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:45</date>
    10  //</624450121760772096>
    11  
    12  
    13  package testutil
    14  
    15  import (
    16  	"bytes"
    17  	"io"
    18  	"io/ioutil"
    19  	"math/rand"
    20  	"os"
    21  	"strings"
    22  	"testing"
    23  )
    24  
    25  //tempfilewithcontent是一个助手函数,它创建一个包含以下字符串内容的临时文件,然后关闭文件句柄
    26  //它返回完整的文件路径
    27  func TempFileWithContent(t *testing.T, content string) string {
    28  	tempFile, err := ioutil.TempFile("", "swarm-temp-file")
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  
    33  	_, err = io.Copy(tempFile, strings.NewReader(content))
    34  	if err != nil {
    35  		os.RemoveAll(tempFile.Name())
    36  		t.Fatal(err)
    37  	}
    38  	if err = tempFile.Close(); err != nil {
    39  		t.Fatal(err)
    40  	}
    41  	return tempFile.Name()
    42  }
    43  
    44  //RandomBytes返回伪随机确定性结果
    45  //因为测试失败必须是可复制的
    46  func RandomBytes(seed, length int) []byte {
    47  	b := make([]byte, length)
    48  	reader := rand.New(rand.NewSource(int64(seed)))
    49  	for n := 0; n < length; {
    50  		read, err := reader.Read(b[n:])
    51  		if err != nil {
    52  			panic(err)
    53  		}
    54  		n += read
    55  	}
    56  	return b
    57  }
    58  
    59  func RandomReader(seed, length int) *bytes.Reader {
    60  	return bytes.NewReader(RandomBytes(seed, length))
    61  }
    62