private GatewayStoreModel GetGatewayStoreModelForConsistencyTest() { Func <HttpRequestMessage, Task <HttpResponseMessage> > messageHandler = async request => { String content = await request.Content.ReadAsStringAsync(); if (content.Equals("document")) { IEnumerable <string> sessionTokens = request.Headers.GetValues("x-ms-session-token"); string sessionToken = ""; foreach (string singleToken in sessionTokens) { sessionToken = singleToken; break; } Assert.AreEqual(sessionToken, "0:9"); } else { IEnumerable <string> enumerable; Assert.IsFalse(request.Headers.TryGetValues("x-ms-session-token", out enumerable)); } return(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("Response") }); }; Mock <IDocumentClientInternal> mockDocumentClient = new Mock <IDocumentClientInternal>(); mockDocumentClient.Setup(client => client.ServiceEndpoint).Returns(new Uri("https://foo")); mockDocumentClient.Setup(client => client.ConsistencyLevel).Returns(ConsistencyLevel.Session); GlobalEndpointManager endpointManager = new GlobalEndpointManager(mockDocumentClient.Object, new ConnectionPolicy()); ConcurrentDictionary <string, ISessionToken> token = new ConcurrentDictionary <string, ISessionToken>(); token["0"] = new SimpleSessionToken(9); ConcurrentDictionary <string, ConcurrentDictionary <string, ISessionToken> > sessionTokensNameBased = new ConcurrentDictionary <string, ConcurrentDictionary <string, ISessionToken> >(); sessionTokensNameBased["dbs/db1/colls/coll1"] = token; ISessionContainer sessionContainer = new SessionContainer(string.Empty, null, sessionTokensNameBased); DocumentClientEventSource eventSource = new DocumentClientEventSource(); HttpMessageHandler httpMessageHandler = new MockMessageHandler(messageHandler); GatewayStoreModel storeModel = new GatewayStoreModel( endpointManager, sessionContainer, TimeSpan.FromSeconds(50), ConsistencyLevel.Session, eventSource, new UserAgentContainer(), ApiType.None, httpMessageHandler); return(storeModel); }
public void ValidateSessionTokenParsingWithInvalidFormat() { string sessionToken = "1;100#1=20#2=40"; ISessionToken parsedSessionToken; Assert.IsFalse(VectorSessionToken.TryCreate(sessionToken, out parsedSessionToken)); sessionToken = "foo"; Assert.IsFalse(SimpleSessionToken.TryCreate(sessionToken, out parsedSessionToken)); }
public void ValidateSuccessfulSessionTokenParsing() { // valid session token string sessionToken = "1#100#1=20#2=5#3=30"; ISessionToken parsedSessionToken; Assert.IsTrue(VectorSessionToken.TryCreate(sessionToken, out parsedSessionToken)); sessionToken = "500"; Assert.IsTrue(SimpleSessionToken.TryCreate(sessionToken, out parsedSessionToken)); }
public void ValidateSessionTokenComparison() { // valid session token ISessionToken sessionToken1; ISessionToken sessionToken2; ISessionToken sessionTokenMerged; Assert.IsTrue(VectorSessionToken.TryCreate("1#100#1=20#2=5#3=30", out sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("2#105#4=10#2=5#3=30", out sessionToken2)); Assert.IsFalse(sessionToken1.Equals(sessionToken2)); Assert.IsFalse(sessionToken2.Equals(sessionToken1)); Assert.IsTrue(sessionToken1.IsValid(sessionToken2)); Assert.IsFalse(sessionToken2.IsValid(sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("2#105#2=5#3=30#4=10", out sessionTokenMerged)); Assert.IsTrue(sessionTokenMerged.Equals(sessionToken1.Merge(sessionToken2))); Assert.IsTrue(VectorSessionToken.TryCreate("1#100#1=20#2=5#3=30", out sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("1#100#1=10#2=8#3=30", out sessionToken2)); Assert.IsFalse(sessionToken1.Equals(sessionToken2)); Assert.IsFalse(sessionToken2.Equals(sessionToken1)); Assert.IsFalse(sessionToken1.IsValid(sessionToken2)); Assert.IsFalse(sessionToken2.IsValid(sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("1#100#1=20#2=8#3=30", out sessionTokenMerged)); Assert.IsTrue(sessionTokenMerged.Equals(sessionToken1.Merge(sessionToken2))); Assert.IsTrue(VectorSessionToken.TryCreate("1#100#1=20#2=5#3=30", out sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("1#102#1=100#2=8#3=30", out sessionToken2)); Assert.IsFalse(sessionToken1.Equals(sessionToken2)); Assert.IsFalse(sessionToken2.Equals(sessionToken1)); Assert.IsTrue(sessionToken1.IsValid(sessionToken2)); Assert.IsFalse(sessionToken2.IsValid(sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("1#102#2=8#3=30#1=100", out sessionTokenMerged)); Assert.IsTrue(sessionTokenMerged.Equals(sessionToken1.Merge(sessionToken2))); Assert.IsTrue(VectorSessionToken.TryCreate("1#101#1=20#2=5#3=30", out sessionToken1)); Assert.IsTrue(VectorSessionToken.TryCreate("1#100#1=20#2=5#3=30#4=40", out sessionToken2)); try { sessionToken1.Merge(sessionToken2); Assert.Fail("Region progress can not be different when version is same"); } catch (InternalServerErrorException) { } try { sessionToken2.IsValid(sessionToken1); Assert.Fail("Region progress can not be different when version is same"); } catch (InternalServerErrorException) { } Assert.IsTrue(SimpleSessionToken.TryCreate("100", out sessionToken1)); Assert.IsTrue(SimpleSessionToken.TryCreate("200", out sessionToken2)); Assert.IsTrue(sessionToken1.Merge(sessionToken2).Equals(sessionToken2)); Assert.IsFalse(sessionToken2.Equals(sessionToken1)); Assert.IsTrue(sessionToken1.IsValid(sessionToken2)); Assert.IsFalse(sessionToken2.IsValid(sessionToken1)); Assert.IsTrue(SimpleSessionToken.TryCreate("100", out sessionToken1)); Assert.IsTrue(SimpleSessionToken.TryCreate("100", out sessionToken2)); Assert.IsTrue(sessionToken1.Merge(sessionToken2).Equals(sessionToken1)); Assert.IsTrue(sessionToken2.Equals(sessionToken1)); Assert.IsTrue(sessionToken1.IsValid(sessionToken2)); Assert.IsTrue(sessionToken2.IsValid(sessionToken1)); }