public void TestReleaseItemExclusive() { var config = new NameValueCollection(_sessionConfig); var provider = new MongoSessionStateStore(); provider.Initialize(DefaultSessionName, config); var context = CreateHttpContext(); var sessionId = GenerateSessionId(); provider.CreateUninitializedItem(context, sessionId, DefaultTimeout); bool locked1; TimeSpan lockAge1; object lockId1; SessionStateActions actions1; provider.GetItemExclusive(context, sessionId, out locked1, out lockAge1, out lockId1, out actions1); provider.ReleaseItemExclusive(context, sessionId, lockId1); bool locked2; TimeSpan lockAge2; object lockId2; SessionStateActions actions2; var storeData = provider.GetItem(context, sessionId, out locked2, out lockAge2, out lockId2, out actions2); Assert.IsNotNull(storeData); Assert.IsFalse(locked2); Assert.AreEqual(SessionStateActions.None, actions2); }
public void TestSetAndReleaseItemExclusiveWhenExistsAndLocked() { var config = new NameValueCollection(_sessionConfig); var provider = new MongoSessionStateStore(); provider.Initialize(DefaultSessionName, config); var context = CreateHttpContext(); var sessionId = GenerateSessionId(); provider.CreateUninitializedItem(context, sessionId, DefaultTimeout); bool locked1; TimeSpan lockAge1; object lockId1; SessionStateActions actions1; // GetItemExclusive locks the item. var storeData = provider.GetItemExclusive(context, sessionId, out locked1, out lockAge1, out lockId1, out actions1); Assert.IsNotNull(storeData); storeData.Items["field"] = "value"; provider.SetAndReleaseItemExclusive(context, sessionId, storeData, lockId1, false); bool locked2; TimeSpan lockAge2; object lockId2; SessionStateActions actions2; var retrievedStoreData = provider.GetItem(context, sessionId, out locked2, out lockAge2, out lockId2, out actions2); Assert.IsNotNull(retrievedStoreData); Assert.AreEqual("value", retrievedStoreData.Items["field"]); Assert.IsFalse(locked2); Assert.AreEqual(SessionStateActions.None, actions2); }
public void TestGetItemWhenLocked() { var config = new NameValueCollection(_sessionConfig); var provider = new MongoSessionStateStore(); provider.Initialize(DefaultSessionName, config); var context = CreateHttpContext(); var sessionId = GenerateSessionId(); provider.CreateUninitializedItem(context, sessionId, DefaultTimeout); // Call exclusive version of get item to force a lock. bool locked1; TimeSpan lockAge1; object lockId1; SessionStateActions actions1; provider.GetItemExclusive(context, sessionId, out locked1, out lockAge1, out lockId1, out actions1); // Sleep for a second to ensure the lockAge can be greater than 0 if it exists. Thread.Sleep(100); bool locked2; TimeSpan lockAge2; object lockId2; SessionStateActions actions2; var storeData = provider.GetItem(context, sessionId, out locked2, out lockAge2, out lockId2, out actions2); Assert.IsNull(storeData); Assert.IsTrue(locked2); Assert.Greater(lockAge2, TimeSpan.Zero); Assert.AreEqual(lockId1, lockId2); }