public async Task AddPartitionKeyRangeToContinuationTokenOnSplit() { const string BackendToken = "backendToken"; StoreRequestNameValueCollection headers = new StoreRequestNameValueCollection(); List <CompositeContinuationToken> compositeContinuationTokensFromSplit = new List <CompositeContinuationToken> { new CompositeContinuationToken { Token = "someToken", Range = new Range <string>("A", "B", true, false) }, new CompositeContinuationToken { Token = "anotherToken", Range = new Range <string>("B", "C", true, false) } }; PartitionRoutingHelper partitionRoutingHelper = new PartitionRoutingHelper(); //With backend header headers.Add(HttpConstants.HttpHeaders.Continuation, BackendToken); ResolvedRangeInfo resolvedRangeInfo = new ResolvedRangeInfo(new PartitionKeyRange(), new List <CompositeContinuationToken>(compositeContinuationTokensFromSplit)); bool result = await partitionRoutingHelper.TryAddPartitionKeyRangeToContinuationTokenAsync( headers, null, null, null, resolvedRangeInfo, NoOpTrace.Singleton, RntdbEnumerationDirection.Reverse); List <CompositeContinuationToken> compositeContinuationTokens = JsonConvert.DeserializeObject <List <CompositeContinuationToken> >(headers.Get(HttpConstants.HttpHeaders.Continuation)); Assert.IsTrue(result); Assert.AreEqual(compositeContinuationTokensFromSplit.Count, compositeContinuationTokens.Count); Assert.AreEqual(BackendToken, compositeContinuationTokens.First().Token); Assert.AreNotEqual(BackendToken, compositeContinuationTokens.Last().Token); //Without backend header headers.Remove(HttpConstants.HttpHeaders.Continuation); resolvedRangeInfo = new ResolvedRangeInfo(new PartitionKeyRange(), new List <CompositeContinuationToken>(compositeContinuationTokensFromSplit)); result = await partitionRoutingHelper.TryAddPartitionKeyRangeToContinuationTokenAsync( headers, null, null, null, resolvedRangeInfo, NoOpTrace.Singleton, RntdbEnumerationDirection.Reverse); compositeContinuationTokens = JsonConvert.DeserializeObject <List <CompositeContinuationToken> >(headers.Get(HttpConstants.HttpHeaders.Continuation)); Assert.IsTrue(result); Assert.IsTrue(compositeContinuationTokens.Count == compositeContinuationTokensFromSplit.Count - 1); Assert.AreEqual(compositeContinuationTokensFromSplit.Last().Token, compositeContinuationTokens.First().Token); }
public void VerifyUnKnownHeader() { StoreRequestNameValueCollection headers = new StoreRequestNameValueCollection(); Assert.AreEqual(0, headers.Keys().Count()); string key = Guid.NewGuid().ToString(); string value = Guid.NewGuid().ToString(); headers[key] = value; Assert.AreEqual(value, headers[key]); Assert.AreEqual(value, headers[key.ToLower()]); Assert.AreEqual(value, headers[key.ToUpper()]); Assert.AreEqual(value, headers.Get(key)); Assert.AreEqual(value, headers.Get(key.ToLower())); Assert.AreEqual(value, headers.Get(key.ToUpper())); Assert.AreEqual(key, headers.Keys().First()); headers.Remove(key); Assert.AreEqual(0, headers.Keys().Count()); Assert.IsNull(headers[key]); }
public void VerifyAllKnownProperties() { Dictionary <string, string> httpHeadersMap = typeof(HttpConstants.HttpHeaders).GetFields(BindingFlags.Public | BindingFlags.Static) .ToDictionary(x => x.Name, x => (string)x.GetValue(null)); Dictionary <string, string> backendHeadersMap = typeof(WFConstants.BackendHeaders).GetFields(BindingFlags.Public | BindingFlags.Static) .ToDictionary(x => x.Name, x => (string)x.GetValue(null)); PropertyInfo[] optimizedResponseHeaders = typeof(StoreRequestNameValueCollection).GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(x => !string.Equals("Item", x.Name)).ToArray(); StoreRequestNameValueCollection headers = new StoreRequestNameValueCollection(); foreach (PropertyInfo propertyInfo in optimizedResponseHeaders) { Assert.AreEqual(0, headers.Count()); Assert.AreEqual(0, headers.Keys().Count()); // Test property first string value = Guid.NewGuid().ToString(); propertyInfo.SetValue(headers, value); Assert.AreEqual(value, propertyInfo.GetValue(headers)); if (!httpHeadersMap.TryGetValue(propertyInfo.Name, out string key)) { if (!backendHeadersMap.TryGetValue(propertyInfo.Name, out key)) { Assert.Fail($"The property name {propertyInfo.Name} should match a header constant name"); } } Assert.AreEqual(1, headers.Count()); Assert.AreEqual(1, headers.Keys().Count()); Assert.AreEqual(key, headers.Keys().First()); Assert.AreEqual(value, headers.Get(key)); Assert.AreEqual(value, headers.Get(key.ToUpper())); Assert.AreEqual(value, headers.Get(key.ToLower())); // Reset the value back to null propertyInfo.SetValue(headers, null); Assert.AreEqual(0, headers.Count()); Assert.AreEqual(0, headers.Keys().Count()); // Check adding via the interface sets the property correctly headers.Add(key, value); Assert.AreEqual(value, propertyInfo.GetValue(headers)); Assert.AreEqual(value, headers.Get(key)); Assert.AreEqual(1, headers.Count()); Assert.AreEqual(1, headers.Keys().Count()); Assert.AreEqual(key, headers.Keys().First()); Assert.AreEqual(value, headers.Get(key)); // Check setting via the interface sets the property correctly value = Guid.NewGuid().ToString(); headers.Set(key, value); Assert.AreEqual(value, propertyInfo.GetValue(headers)); Assert.AreEqual(value, headers.Get(key)); Assert.AreEqual(1, headers.Count()); Assert.AreEqual(1, headers.Keys().Count()); Assert.AreEqual(key, headers.Keys().First()); Assert.AreEqual(value, headers.Get(key)); // Check setting via the interface sets the property correctly headers.Remove(key); Assert.AreEqual(null, propertyInfo.GetValue(headers)); Assert.AreEqual(null, headers.Get(key)); Assert.AreEqual(0, headers.Count()); Assert.AreEqual(0, headers.Keys().Count()); } }