@@ -4,7 +4,7 @@ import { take } from 'rxjs/operators';
44import { Election , Etcd3 } from '../' ;
55import { Campaign } from '../election' ;
66import { NotCampaigningError } from '../errors' ;
7- import { delay , getDeferred } from '../util' ;
7+ import { delay , getDeferred , onceEvent } from '../util' ;
88import { getOptions , tearDownTestClient } from './util' ;
99
1010const sleep = ( t : number ) => new Promise ( resolve => setTimeout ( resolve , t ) ) ;
@@ -192,4 +192,38 @@ describe('election', () => {
192192 await observer . cancel ( ) ;
193193 } ) ;
194194 } ) ;
195+
196+ it ( 'fixes #176' , async function ( ) {
197+ const observer1 = await election . observe ( ) ;
198+
199+ const client2 = new Etcd3 ( getOptions ( ) ) ;
200+ const election2 = client2 . election ( 'test-election' , 1 ) ;
201+ const observer2 = await election2 . observe ( ) ;
202+ const campaign2 = election2 . campaign ( 'candidate2' ) ;
203+ await onceEvent ( campaign2 , '_isWaiting' ) ;
204+
205+ const client3 = new Etcd3 ( getOptions ( ) ) ;
206+ const election3 = client3 . election ( 'test-election' , 1 ) ;
207+ const observer3 = await election3 . observe ( ) ;
208+ const campaign3 = election3 . campaign ( 'candidate3' ) ;
209+ await onceEvent ( campaign3 , '_isWaiting' ) ;
210+
211+ expect ( observer1 . leader ( ) ) . to . equal ( 'candidate' ) ;
212+ expect ( observer2 . leader ( ) ) . to . equal ( 'candidate' ) ;
213+ expect ( observer3 . leader ( ) ) . to . equal ( 'candidate' ) ;
214+
215+ const changes : string [ ] = [ ] ;
216+ campaign . on ( 'elected' , ( ) => changes . push ( 'leader is now 1' ) ) ;
217+ campaign3 . on ( 'elected' , ( ) => changes . push ( 'leader is now 3' ) ) ;
218+
219+ await campaign2 . resign ( ) ;
220+ await delay ( 1000 ) ; // give others a chance to see the change, if any
221+
222+ expect ( observer1 . leader ( ) ) . to . equal ( 'candidate' ) ;
223+ expect ( observer3 . leader ( ) ) . to . equal ( 'candidate' ) ;
224+ expect ( changes ) . to . be . empty ;
225+
226+ client2 . close ( ) ;
227+ client3 . close ( ) ;
228+ } ) ;
195229} ) ;
0 commit comments