@@ -19,12 +19,15 @@ import (
19
19
"time"
20
20
21
21
docker "github.com/fsouza/go-dockerclient"
22
+ "github.com/hyperledger/fabric/common/metrics/disabled"
23
+ "github.com/hyperledger/fabric/common/metrics/metricsfakes"
22
24
"github.com/hyperledger/fabric/common/util"
23
25
"github.com/hyperledger/fabric/core/chaincode/platforms"
24
26
"github.com/hyperledger/fabric/core/chaincode/platforms/golang"
25
27
"github.com/hyperledger/fabric/core/container/ccintf"
26
28
coreutil "github.com/hyperledger/fabric/core/testutil"
27
29
pb "github.com/hyperledger/fabric/protos/peer"
30
+ . "github.com/onsi/gomega"
28
31
"github.com/spf13/viper"
29
32
"github.com/stretchr/testify/assert"
30
33
"github.com/stretchr/testify/require"
@@ -33,7 +36,7 @@ import (
33
36
// This test used to be part of an integration style test in core/container, moved to here
34
37
func TestIntegrationPath (t * testing.T ) {
35
38
coreutil .SetupTestConfig ()
36
- dc := NewDockerVM ("" , util .GenerateUUID ())
39
+ dc := NewDockerVM ("" , util .GenerateUUID (), NewBuildMetrics ( & disabled. Provider {}) )
37
40
ccid := ccintf.CCID {Name : "simple" }
38
41
39
42
err := dc .Start (ccid , nil , nil , nil , InMemBuilder {})
@@ -77,8 +80,18 @@ func TestGetDockerHostConfig(t *testing.T) {
77
80
}
78
81
79
82
func Test_Start (t * testing.T ) {
80
- dvm := DockerVM {}
81
- ccid := ccintf.CCID {Name : "simple" }
83
+ gt := NewGomegaWithT (t )
84
+ fakeChaincodeContainerBuildDuration := & metricsfakes.Histogram {}
85
+ fakeChaincodeContainerBuildDuration .WithReturns (fakeChaincodeContainerBuildDuration )
86
+ dvm := DockerVM {
87
+ BuildMetrics : & BuildMetrics {
88
+ ChaincodeContainerBuildDuration : fakeChaincodeContainerBuildDuration ,
89
+ },
90
+ }
91
+ ccid := ccintf.CCID {
92
+ Name : "simple" ,
93
+ Version : "1.0" ,
94
+ }
82
95
args := make ([]string , 1 )
83
96
env := make ([]string , 1 )
84
97
files := map [string ][]byte {
@@ -90,25 +103,25 @@ func Test_Start(t *testing.T) {
90
103
dvm .getClientFnc = getMockClient
91
104
getClientErr = true
92
105
err := dvm .Start (ccid , args , env , files , nil )
93
- testerr ( t , err , false )
106
+ gt . Expect ( err ). To ( HaveOccurred () )
94
107
getClientErr = false
95
108
96
109
// case 2: dockerClient.CreateContainer returns error
97
110
createErr = true
98
111
err = dvm .Start (ccid , args , env , files , nil )
99
- testerr ( t , err , false )
112
+ gt . Expect ( err ). To ( HaveOccurred () )
100
113
createErr = false
101
114
102
115
// case 3: dockerClient.UploadToContainer returns error
103
116
uploadErr = true
104
117
err = dvm .Start (ccid , args , env , files , nil )
105
- testerr ( t , err , false )
118
+ gt . Expect ( err ). To ( HaveOccurred () )
106
119
uploadErr = false
107
120
108
121
// case 4: dockerClient.StartContainer returns docker.noSuchImgErr
109
122
noSuchImgErr = true
110
123
err = dvm .Start (ccid , args , env , files , nil )
111
- testerr ( t , err , false )
124
+ gt . Expect ( err ). To ( HaveOccurred () )
112
125
113
126
chaincodePath := "github.com/hyperledger/fabric/examples/chaincode/go/example01/cmd"
114
127
spec := & pb.ChaincodeSpec {
@@ -138,34 +151,43 @@ func Test_Start(t *testing.T) {
138
151
viper .Set ("vm.docker.attachStdout" , true )
139
152
startErr = true
140
153
err = dvm .Start (ccid , args , env , files , bldr )
141
- testerr (t , err , false )
154
+ gt .Expect (err ).To (HaveOccurred ())
155
+
156
+ gt .Expect (fakeChaincodeContainerBuildDuration .WithCallCount ()).To (Equal (1 ))
157
+ labelValues := fakeChaincodeContainerBuildDuration .WithArgsForCall (0 )
158
+ gt .Expect (labelValues ).To (Equal ([]string {
159
+ "chaincode" , "simple:1.0" ,
160
+ "success" , "true" ,
161
+ }))
162
+ gt .Expect (fakeChaincodeContainerBuildDuration .ObserveArgsForCall (0 )).NotTo (BeZero ())
163
+ gt .Expect (fakeChaincodeContainerBuildDuration .ObserveArgsForCall (0 )).To (BeNumerically ("<" , 1.0 ))
142
164
startErr = false
143
165
144
166
// Success cases
145
167
err = dvm .Start (ccid , args , env , files , bldr )
146
- testerr ( t , err , true )
168
+ gt . Expect ( err ). NotTo ( HaveOccurred () )
147
169
noSuchImgErr = false
148
170
149
171
// dockerClient.StopContainer returns error
150
172
stopErr = true
151
173
err = dvm .Start (ccid , args , env , files , nil )
152
- testerr ( t , err , true )
174
+ gt . Expect ( err ). NotTo ( HaveOccurred () )
153
175
stopErr = false
154
176
155
177
// dockerClient.KillContainer returns error
156
178
killErr = true
157
179
err = dvm .Start (ccid , args , env , files , nil )
158
- testerr ( t , err , true )
180
+ gt . Expect ( err ). NotTo ( HaveOccurred () )
159
181
killErr = false
160
182
161
183
// dockerClient.RemoveContainer returns error
162
184
removeErr = true
163
185
err = dvm .Start (ccid , args , env , files , nil )
164
- testerr ( t , err , true )
186
+ gt . Expect ( err ). NotTo ( HaveOccurred () )
165
187
removeErr = false
166
188
167
189
err = dvm .Start (ccid , args , env , files , nil )
168
- testerr ( t , err , true )
190
+ gt . Expect ( err ). NotTo ( HaveOccurred () )
169
191
}
170
192
171
193
func Test_Stop (t * testing.T ) {
@@ -176,12 +198,12 @@ func Test_Stop(t *testing.T) {
176
198
getClientErr = true
177
199
dvm .getClientFnc = getMockClient
178
200
err := dvm .Stop (ccid , 10 , true , true )
179
- testerr (t , err , false )
201
+ assert . Error (t , err )
180
202
getClientErr = false
181
203
182
204
// Success case
183
205
err = dvm .Stop (ccid , 10 , true , true )
184
- testerr (t , err , true )
206
+ assert . NoError (t , err )
185
207
}
186
208
187
209
func Test_HealthCheck (t * testing.T ) {
@@ -308,14 +330,6 @@ func (imb InMemBuilder) Build() (io.Reader, error) {
308
330
return inputbuf , nil
309
331
}
310
332
311
- func testerr (t * testing.T , err error , succ bool ) {
312
- if succ {
313
- assert .NoError (t , err , "Expected success but got error" )
314
- } else {
315
- assert .Error (t , err , "Expected failure but succeeded" )
316
- }
317
- }
318
-
319
333
func getMockClient () (dockerClient , error ) {
320
334
if getClientErr {
321
335
return nil , errors .New ("Failed to get client" )
0 commit comments