@@ -229,8 +229,8 @@ public async Task DifferentHosts_UsingSameStorageAccount_CanObtainLease()
229
229
var traceWriter = new TestTraceWriter ( TraceLevel . Verbose ) ;
230
230
231
231
var lockManager = CreateLockManager ( ) ;
232
- using ( var manager1 = PrimaryHostCoordinator . Create ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId1 , instanceId , traceWriter , null ) )
233
- using ( var manager2 = PrimaryHostCoordinator . Create ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId2 , instanceId , traceWriter , null ) )
232
+ using ( var manager1 = new PrimaryHostCoordinator ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId1 , instanceId , traceWriter , null ) )
233
+ using ( var manager2 = new PrimaryHostCoordinator ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId2 , instanceId , traceWriter , null ) )
234
234
{
235
235
Task manager1Check = TestHelpers . Await ( ( ) => manager1 . HasLease ) ;
236
236
Task manager2Check = TestHelpers . Await ( ( ) => manager2 . HasLease ) ;
@@ -241,6 +241,34 @@ public async Task DifferentHosts_UsingSameStorageAccount_CanObtainLease()
241
241
await Task . WhenAll ( ClearLeaseBlob ( hostId1 ) , ClearLeaseBlob ( hostId2 ) ) ;
242
242
}
243
243
244
+ [ Fact ]
245
+ public async Task Create_LastCreatedInstanceAquiresLease ( )
246
+ {
247
+ string hostId = Guid . NewGuid ( ) . ToString ( ) ;
248
+ string instanceId = Guid . NewGuid ( ) . ToString ( ) ;
249
+ string connectionString = AmbientConnectionStringProvider . Instance . GetConnectionString ( ConnectionStringNames . Storage ) ;
250
+ var traceWriter = new TestTraceWriter ( TraceLevel . Verbose ) ;
251
+
252
+ var lockManager = CreateLockManager ( ) ;
253
+ using ( var manager = PrimaryHostCoordinator . Create ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId , instanceId , traceWriter , null ) )
254
+ {
255
+ Task managerCheck = TestHelpers . Await ( ( ) => manager . HasLease ) ;
256
+ await Task . WhenAll ( managerCheck ) ;
257
+ }
258
+
259
+ var manager1 = PrimaryHostCoordinator . Create ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId , instanceId , traceWriter , null ) ;
260
+ Task manager1Check = TestHelpers . Await ( ( ) => manager1 . HasLease ) ;
261
+ await Task . WhenAll ( manager1Check ) ;
262
+
263
+ var manager2 = PrimaryHostCoordinator . Create ( lockManager , TimeSpan . FromSeconds ( 15 ) , hostId , instanceId , traceWriter , null ) ;
264
+ Task manager2Check = TestHelpers . Await ( ( ) => manager2 . HasLease ) ;
265
+ await Task . WhenAll ( manager2Check ) ;
266
+ Assert . True ( traceWriter . Traces [ traceWriter . Traces . Count ( ) - 2 ] . Message . Contains ( $ "Host instance '{ instanceId } ' released lock lease") ) ;
267
+ Assert . True ( traceWriter . Traces . Last ( ) . Message . Contains ( $ "Host lock lease acquired by instance ID '{ instanceId } '") ) ;
268
+
269
+ await Task . WhenAll ( ClearLeaseBlob ( hostId ) ) ;
270
+ }
271
+
244
272
private static async Task < ICloudBlob > GetLockBlobAsync ( string accountConnectionString , string hostId )
245
273
{
246
274
CloudStorageAccount account = CloudStorageAccount . Parse ( accountConnectionString ) ;
0 commit comments