コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }