OSDN Git Service

add log (#373)
[bytom/vapor.git] / version / version_test.go
1 package version
2
3 import (
4         "fmt"
5         "testing"
6
7         "gopkg.in/fatih/set.v0"
8         gover "github.com/hashicorp/go-version"
9 )
10
11 func TestCompare(t *testing.T) {
12         v1, err := gover.NewVersion(Version)
13         if err != nil {
14                 t.Fatal("Version 1 format error.")
15         }
16         v2, err := gover.NewVersion(Version + "+f873dfca")
17         if err != nil {
18                 t.Fatal("Version 2 format error.")
19         }
20         if v1.GreaterThan(v2) || v1.GreaterThan(v2) {
21                 t.Error("Version comparison error.")
22         }
23 }
24
25 func TestCompatibleWith(t *testing.T) {
26         cases := []struct {
27                 a      string
28                 b      string
29                 result bool
30         }{
31                 {
32                         "1.0.4",
33                         "1.0.4",
34                         true,
35                 },
36                 {
37                         "1.0.4",
38                         "1.0.5",
39                         true,
40                 },
41                 {
42                         "1.0.4",
43                         "1.1.5",
44                         true,
45                 },
46                 {
47                         "1.0.5",
48                         "1.0.5-90825109",
49                         true,
50                 },
51                 {
52                         "1.0.5",
53                         "1.0.5+90825109",
54                         true,
55                 },
56                 {
57                         "1.0.5",
58                         "2.0.5",
59                         false,
60                 },
61                 {
62                         "1.0.5-90825109",
63                         "1.0.5+90825109",
64                         true,
65                 },
66         }
67
68         for i, c := range cases {
69                 Version = c.a
70                 if result, _ := CompatibleWith(c.b); c.result != result {
71                         t.Errorf("case %d: got %t want %t", i, c.result, result)
72                 }
73         }
74 }
75
76 func TestCheckUpdate(t *testing.T) {
77         cases := []struct {
78                 desc           string
79                 localVer       string
80                 remotePeers    []string
81                 wantStatus     uint16
82                 wantmaxVerSeen string
83                 wantNotified   bool
84         }{
85                 {
86                         desc:           "has large version number update",
87                         localVer:       "1.0",
88                         remotePeers:    []string{"1.0", "2.0", "1.0.3"},
89                         wantStatus:     hasMUpdate,
90                         wantmaxVerSeen: "2.0",
91                         wantNotified:   true,
92                 },
93                 {
94                         desc:           "some remote version less than local version, but some remote verison larger than local version",
95                         localVer:       "1.0",
96                         remotePeers:    []string{"0.8", "1.1", "1.0.3", "0.9"},
97                         wantStatus:     hasUpdate,
98                         wantmaxVerSeen: "1.1",
99                         wantNotified:   true,
100                 },
101                 {
102                         desc:           "has small version number update",
103                         localVer:       "1.0",
104                         remotePeers:    []string{"1.0", "1.0.3", "1.0.2"},
105                         wantStatus:     hasUpdate,
106                         wantmaxVerSeen: "1.0.3",
107                         wantNotified:   true,
108                 },
109                 {
110                         desc:           "the remote equals to local version",
111                         localVer:       "1.0",
112                         remotePeers:    []string{"1.0", "1.0", "1.0"},
113                         wantStatus:     noUpdate,
114                         wantmaxVerSeen: "1.0",
115                         wantNotified:   false,
116                 },
117                 {
118                         desc:           "the remote version less than local version",
119                         localVer:       "1.0",
120                         remotePeers:    []string{"0.8", "0.8", "0.8"},
121                         wantStatus:     noUpdate,
122                         wantmaxVerSeen: "1.0",
123                         wantNotified:   false,
124                 },
125         }
126
127         for i, c := range cases {
128                 status := &UpdateStatus{
129                         maxVerSeen:    c.localVer,
130                         notified:      false,
131                         seedSet:       set.New(),
132                         versionStatus: noUpdate,
133                 }
134                 for i, remoteVer := range c.remotePeers {
135                         peer := fmt.Sprintf("peer%d", i)
136                         status.seedSet.Add(peer)
137                         if err := status.CheckUpdate(c.localVer, remoteVer, peer); err != nil {
138                                 t.Fatal(err)
139                         }
140                 }
141
142                 if status.versionStatus != c.wantStatus {
143                         t.Errorf("#%d(%s) got version status:%d, want version status:%d", i, c.desc, status.versionStatus, c.wantStatus)
144                 }
145
146                 if status.notified != c.wantNotified {
147                         t.Errorf("#%d(%s) got notified:%t, want notified:%t", i, c.desc, status.notified, c.wantNotified)
148                 }
149
150                 if status.maxVerSeen != c.wantmaxVerSeen {
151                         t.Errorf("#%d(%s) got max version seen%s, want max version seen%s", i, c.desc, status.maxVerSeen, c.wantmaxVerSeen)
152                 }
153         }
154 }
155
156 // In case someone edit the iota part and have the mapping changed:
157 // noUpdate: 0
158 // hasUpdate: 1
159 // hasMUpdate: 2
160 func TestFlag(t *testing.T) {
161         if noUpdate != 0 {
162                 t.Error("noUpdate value error")
163         }
164         if hasUpdate != 1 {
165                 t.Error("hasUpdate value error")
166         }
167         if hasMUpdate != 2 {
168                 t.Error("noUpdate value error")
169         }
170 }