@@ -23,6 +23,69 @@ const (
23
23
24
24
var logger = log .New (os .Stdout , "" , log .LstdFlags )
25
25
26
+ func TestSyncNow (t * testing.T ) {
27
+ cs , testconsul := testConsul (t )
28
+ defer cs .Shutdown ()
29
+ defer testconsul .Stop ()
30
+
31
+ cs .SetAddrFinder (func (h string ) (string , int ) {
32
+ a , pstr , _ := net .SplitHostPort (h )
33
+ p , _ := net .LookupPort ("tcp" , pstr )
34
+ return a , p
35
+ })
36
+ cs .syncInterval = 9000 * time .Hour
37
+
38
+ service := & structs.Service {Name : "foo1" , Tags : []string {"a" , "b" }}
39
+ services := map [ServiceKey ]* structs.Service {
40
+ GenerateServiceKey (service ): service ,
41
+ }
42
+
43
+ // Run syncs once on startup and then blocks forever
44
+ go cs .Run ()
45
+
46
+ if err := cs .SetServices (serviceGroupName , services ); err != nil {
47
+ t .Fatalf ("error setting services: %v" , err )
48
+ }
49
+
50
+ synced := false
51
+ for i := 0 ; ! synced && i < 10 ; i ++ {
52
+ time .Sleep (250 * time .Millisecond )
53
+ agentServices , err := cs .queryAgentServices ()
54
+ if err != nil {
55
+ t .Fatalf ("error querying consul services: %v" , err )
56
+ }
57
+ synced = len (agentServices ) == 1
58
+ }
59
+ if ! synced {
60
+ t .Fatalf ("initial sync never occurred" )
61
+ }
62
+
63
+ // SetServices again should cause another sync
64
+ service1 := & structs.Service {Name : "foo1" , Tags : []string {"Y" , "Z" }}
65
+ service2 := & structs.Service {Name : "bar" }
66
+ services = map [ServiceKey ]* structs.Service {
67
+ GenerateServiceKey (service1 ): service1 ,
68
+ GenerateServiceKey (service2 ): service2 ,
69
+ }
70
+
71
+ if err := cs .SetServices (serviceGroupName , services ); err != nil {
72
+ t .Fatalf ("error setting services: %v" , err )
73
+ }
74
+
75
+ synced = false
76
+ for i := 0 ; ! synced && i < 10 ; i ++ {
77
+ time .Sleep (250 * time .Millisecond )
78
+ agentServices , err := cs .queryAgentServices ()
79
+ if err != nil {
80
+ t .Fatalf ("error querying consul services: %v" , err )
81
+ }
82
+ synced = len (agentServices ) == 2
83
+ }
84
+ if ! synced {
85
+ t .Fatalf ("SetServices didn't sync immediately" )
86
+ }
87
+ }
88
+
26
89
func TestCheckRegistration (t * testing.T ) {
27
90
cs , err := NewSyncer (config .DefaultConsulConfig (), make (chan struct {}), logger )
28
91
if err != nil {
0 commit comments