1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
import unittest
import uuid
import pytest
import azure.cosmos.documents as documents
from azure.cosmos.vector_session_token import VectorSessionToken
from azure.cosmos.errors import CosmosError
@pytest.mark.usefixtures("teardown")
class SessionTokenUnitTest(unittest.TestCase):
"""Test to ensure escaping of non-ascii characters from partition key"""
def test_validate_successful_session_token_parsing(self):
#valid session token
session_token = "1#100#1=20#2=5#3=30"
self.assertEquals(VectorSessionToken.create(session_token).convert_to_string(), "1#100#1=20#2=5#3=30")
def test_validate_session_token_parsing_with_invalid_version(self):
session_token = "foo#100#1=20#2=5#3=30"
self.assertIsNone(VectorSessionToken.create(session_token))
def test_validate_session_token_parsing_with_invalid_global_lsn(self):
session_token = "1#foo#1=20#2=5#3=30"
self.assertIsNone(VectorSessionToken.create(session_token))
def test_validate_session_token_parsing_with_invalid_region_progress(self):
session_token = "1#100#1=20#2=x#3=30"
self.assertIsNone(VectorSessionToken.create(session_token))
def test_validate_session_token_parsing_with_invalid_format(self):
session_token = "1;100#1=20#2=40"
self.assertIsNone(VectorSessionToken.create(session_token))
def test_validate_session_token_parsing_from_empty_string(self):
session_token = ""
self.assertIsNone(VectorSessionToken.create(session_token))
def test_validate_session_token_comparison(self):
#valid session token
session_token1 = VectorSessionToken.create("1#100#1=20#2=5#3=30")
session_token2 = VectorSessionToken.create("2#105#4=10#2=5#3=30")
self.assertIsNotNone(session_token1)
self.assertIsNotNone(session_token2)
self.assertFalse(session_token1.equals(session_token2))
self.assertFalse(session_token2.equals(session_token1))
session_token_merged = VectorSessionToken.create("2#105#2=5#3=30#4=10")
self.assertIsNotNone(session_token_merged)
self.assertTrue(session_token1.merge(session_token2).equals(session_token_merged))
session_token1 = VectorSessionToken.create("1#100#1=20#2=5#3=30")
session_token2 = VectorSessionToken.create("1#100#1=10#2=8#3=30")
self.assertIsNotNone(session_token1)
self.assertIsNotNone(session_token2)
self.assertFalse(session_token1.equals(session_token2))
self.assertFalse(session_token2.equals(session_token1))
session_token_merged = VectorSessionToken.create("1#100#1=20#2=8#3=30")
self.assertIsNotNone(session_token_merged)
self.assertTrue(session_token_merged.equals(session_token1.merge(session_token2)))
session_token1 = VectorSessionToken.create("1#100#1=20#2=5#3=30")
session_token2 = VectorSessionToken.create("1#102#1=100#2=8#3=30")
self.assertIsNotNone(session_token1)
self.assertIsNotNone(session_token1)
self.assertFalse(session_token1.equals(session_token2))
self.assertFalse(session_token2.equals(session_token1))
session_token_merged = VectorSessionToken.create("1#102#2=8#3=30#1=100")
self.assertIsNotNone(session_token_merged)
self.assertTrue(session_token_merged.equals(session_token1.merge(session_token2)))
session_token1 = VectorSessionToken.create("1#101#1=20#2=5#3=30")
session_token2 = VectorSessionToken.create("1#100#1=20#2=5#3=30#4=40")
self.assertIsNotNone(session_token1)
self.assertIsNotNone(session_token2)
try:
session_token1.merge(session_token2)
self.fail("Region progress can not be different when version is same")
except CosmosError as e:
self.assertEquals(str(e), "Status Code: 500. Compared session tokens '1#101#1=20#2=5#3=30' and '1#100#1=20#2=5#3=30#4=40' have unexpected regions.")
|