@@ -20,20 +20,30 @@ import (
20
20
"fmt"
21
21
"io"
22
22
"net"
23
+ "strings"
23
24
"sync"
24
25
"sync/atomic"
25
26
"testing"
26
27
"time"
27
28
28
29
"github.com/hyperledger/fabric/gossip/common"
29
30
proto "github.com/hyperledger/fabric/protos/gossip"
31
+ "github.com/spf13/viper"
30
32
"github.com/stretchr/testify/assert"
31
33
"golang.org/x/net/context"
32
34
"google.golang.org/grpc"
33
35
)
34
36
35
37
var timeout = time .Second * time .Duration (15 )
36
38
39
+ func init () {
40
+ aliveTimeInterval := time .Duration (time .Millisecond * 100 )
41
+ SetAliveTimeInterval (aliveTimeInterval )
42
+ SetAliveExpirationTimeout (10 * aliveTimeInterval )
43
+ SetAliveExpirationCheckInterval (aliveTimeInterval )
44
+ SetReconnectInterval (10 * aliveTimeInterval )
45
+ }
46
+
37
47
type dummyCommModule struct {
38
48
id string
39
49
presumeDead chan common.PKIidType
@@ -141,13 +151,6 @@ func (comm *dummyCommModule) CloseConn(peer *NetworkMember) {
141
151
comm .conns [peer .Endpoint ].Close ()
142
152
}
143
153
144
- func init () {
145
- aliveTimeInterval = time .Duration (time .Millisecond * 100 )
146
- aliveExpirationTimeout = 10 * aliveTimeInterval
147
- aliveExpirationCheckInterval = aliveTimeInterval
148
- reconnectInterval = aliveExpirationTimeout
149
- }
150
-
151
154
func (g * gossipInstance ) GossipStream (stream proto.Gossip_GossipStreamServer ) error {
152
155
for {
153
156
gMsg , err := stream .Recv ()
@@ -348,12 +351,12 @@ func TestInitiateSync(t *testing.T) {
348
351
if atomic .LoadInt32 (& toDie ) == int32 (1 ) {
349
352
return
350
353
}
351
- time .Sleep (aliveExpirationTimeout / 3 )
354
+ time .Sleep (getAliveExpirationTimeout () / 3 )
352
355
inst .InitiateSync (9 )
353
356
}
354
357
}()
355
358
}
356
- time .Sleep (aliveExpirationTimeout * 4 )
359
+ time .Sleep (getAliveExpirationTimeout () * 4 )
357
360
assertMembership (t , instances , nodeNum - 1 )
358
361
atomic .StoreInt32 (& toDie , int32 (1 ))
359
362
stopInstances (t , instances )
@@ -472,7 +475,7 @@ func TestConvergence(t *testing.T) {
472
475
}
473
476
474
477
assertMembership (t , instances , 3 )
475
- connector := createDiscoveryInstance (4623 , fmt . Sprintf ( "d13" ) , []string {bootPeer (4611 ), bootPeer (4615 ), bootPeer (4619 )})
478
+ connector := createDiscoveryInstance (4623 , "d13" , []string {bootPeer (4611 ), bootPeer (4615 ), bootPeer (4619 )})
476
479
instances = append (instances , connector )
477
480
assertMembership (t , instances , 12 )
478
481
connector .Stop ()
@@ -481,6 +484,44 @@ func TestConvergence(t *testing.T) {
481
484
stopInstances (t , instances )
482
485
}
483
486
487
+ func TestConfigFromFile (t * testing.T ) {
488
+ preAliveTimeInterval := getAliveTimeInterval ()
489
+ preAliveExpirationTimeout := getAliveExpirationTimeout ()
490
+ preAliveExpirationCheckInterval := getAliveExpirationCheckInterval ()
491
+ preReconnectInterval := getReconnectInterval ()
492
+
493
+ // Recover the config values in order to avoid impacting other tests
494
+ defer func () {
495
+ SetAliveTimeInterval (preAliveTimeInterval )
496
+ SetAliveExpirationTimeout (preAliveExpirationTimeout )
497
+ SetAliveExpirationCheckInterval (preAliveExpirationCheckInterval )
498
+ SetReconnectInterval (preReconnectInterval )
499
+ }()
500
+
501
+ // Verify if using default values when config is missing
502
+ viper .Reset ()
503
+ aliveExpirationCheckInterval = 0 * time .Second
504
+ assert .Equal (t , time .Duration (5 )* time .Second , getAliveTimeInterval ())
505
+ assert .Equal (t , time .Duration (25 )* time .Second , getAliveExpirationTimeout ())
506
+ assert .Equal (t , time .Duration (25 )* time .Second / 10 , getAliveExpirationCheckInterval ())
507
+ assert .Equal (t , time .Duration (25 )* time .Second , getReconnectInterval ())
508
+
509
+ //Verify reading the values from config file
510
+ viper .Reset ()
511
+ aliveExpirationCheckInterval = 0 * time .Second
512
+ viper .SetConfigName ("core" )
513
+ viper .SetEnvPrefix ("CORE" )
514
+ viper .AddConfigPath ("./../../peer" )
515
+ viper .SetEnvKeyReplacer (strings .NewReplacer ("." , "_" ))
516
+ viper .AutomaticEnv ()
517
+ err := viper .ReadInConfig ()
518
+ assert .NoError (t , err )
519
+ assert .Equal (t , time .Duration (5 )* time .Second , getAliveTimeInterval ())
520
+ assert .Equal (t , time .Duration (25 )* time .Second , getAliveExpirationTimeout ())
521
+ assert .Equal (t , time .Duration (25 )* time .Second / 10 , getAliveExpirationCheckInterval ())
522
+ assert .Equal (t , time .Duration (25 )* time .Second , getReconnectInterval ())
523
+ }
524
+
484
525
func waitUntilOrFail (t * testing.T , pred func () bool ) {
485
526
start := time .Now ()
486
527
limit := start .UnixNano () + timeout .Nanoseconds ()
0 commit comments