github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/cmd/swarm/swarm-snapshot/create_test.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:33</date> 10 //</624450071856943104> 11 12 13 package main 14 15 import ( 16 "encoding/json" 17 "fmt" 18 "io/ioutil" 19 "os" 20 "runtime" 21 "sort" 22 "strconv" 23 "strings" 24 "testing" 25 26 "github.com/ethereum/go-ethereum/p2p/simulations" 27 ) 28 29 //testsnapshotcreate是一个高级别的e2e测试,用于测试快照生成。 30 //它运行一些带有不同标志值和生成的加载的“创建”命令 31 //快照文件以验证其内容。 32 func TestSnapshotCreate(t *testing.T) { 33 if runtime.GOOS == "windows" { 34 t.Skip() 35 } 36 37 for _, v := range []struct { 38 name string 39 nodes int 40 services string 41 }{ 42 { 43 name: "defaults", 44 }, 45 { 46 name: "more nodes", 47 nodes: defaultNodes + 5, 48 }, 49 { 50 name: "services", 51 services: "stream,pss,zorglub", 52 }, 53 { 54 name: "services with bzz", 55 services: "bzz,pss", 56 }, 57 } { 58 t.Run(v.name, func(t *testing.T) { 59 t.Parallel() 60 61 file, err := ioutil.TempFile("", "swarm-snapshot") 62 if err != nil { 63 t.Fatal(err) 64 } 65 defer os.Remove(file.Name()) 66 67 if err = file.Close(); err != nil { 68 t.Error(err) 69 } 70 71 args := []string{"create"} 72 if v.nodes > 0 { 73 args = append(args, "--nodes", strconv.Itoa(v.nodes)) 74 } 75 if v.services != "" { 76 args = append(args, "--services", v.services) 77 } 78 testCmd := runSnapshot(t, append(args, file.Name())...) 79 80 testCmd.ExpectExit() 81 if code := testCmd.ExitStatus(); code != 0 { 82 t.Fatalf("command exit code %v, expected 0", code) 83 } 84 85 f, err := os.Open(file.Name()) 86 if err != nil { 87 t.Fatal(err) 88 } 89 defer func() { 90 err := f.Close() 91 if err != nil { 92 t.Error("closing snapshot file", "err", err) 93 } 94 }() 95 96 b, err := ioutil.ReadAll(f) 97 if err != nil { 98 t.Fatal(err) 99 } 100 var snap simulations.Snapshot 101 err = json.Unmarshal(b, &snap) 102 if err != nil { 103 t.Fatal(err) 104 } 105 106 wantNodes := v.nodes 107 if wantNodes == 0 { 108 wantNodes = defaultNodes 109 } 110 gotNodes := len(snap.Nodes) 111 if gotNodes != wantNodes { 112 t.Errorf("got %v nodes, want %v", gotNodes, wantNodes) 113 } 114 115 if len(snap.Conns) == 0 { 116 t.Error("no connections in a snapshot") 117 } 118 119 var wantServices []string 120 if v.services != "" { 121 wantServices = strings.Split(v.services, ",") 122 } else { 123 wantServices = []string{"bzz"} 124 } 125 //对服务名进行排序,以便进行比较 126 //作为每个节点排序服务的字符串 127 sort.Strings(wantServices) 128 129 for i, n := range snap.Nodes { 130 gotServices := n.Node.Config.Services 131 sort.Strings(gotServices) 132 if fmt.Sprint(gotServices) != fmt.Sprint(wantServices) { 133 t.Errorf("got services %v for node %v, want %v", gotServices, i, wantServices) 134 } 135 } 136 137 }) 138 } 139 } 140