public async Task ContainerSettingsIndexTest() { string containerJsonString = "{\"indexingPolicy\":{\"automatic\":true,\"indexingMode\":\"Consistent\",\"includedPaths\":[{\"path\":\"/*\",\"indexes\":[{\"dataType\":\"Number\",\"precision\":-1,\"kind\":\"Range\"},{\"dataType\":\"String\",\"precision\":-1,\"kind\":\"Range\"}]}],\"excludedPaths\":[{\"path\":\"/\\\"_etag\\\"/?\"}],\"compositeIndexes\":[],\"spatialIndexes\":[]},\"id\":\"MigrationTest\",\"partitionKey\":{\"paths\":[\"/id\"],\"kind\":\"Hash\"}}"; CosmosJsonDotNetSerializer serializerCore = new CosmosJsonDotNetSerializer(); ContainerProperties containerProperties = null; using (MemoryStream memory = new MemoryStream(Encoding.UTF8.GetBytes(containerJsonString))) { containerProperties = serializerCore.FromStream <ContainerProperties>(memory); } Assert.IsNotNull(containerProperties); Assert.AreEqual("MigrationTest", containerProperties.Id); string containerJsonAfterConversion = null; using (Stream stream = serializerCore.ToStream <ContainerProperties>(containerProperties)) { using (StreamReader sr = new StreamReader(stream)) { containerJsonAfterConversion = await sr.ReadToEndAsync(); } } Assert.AreEqual(containerJsonString, containerJsonAfterConversion); }
public void ValidateSerializer() { CosmosJsonDotNetSerializer cosmosDefaultJsonSerializer = new CosmosJsonDotNetSerializer(); using (Stream stream = cosmosDefaultJsonSerializer.ToStream <ToDoActivity>(this.toDoActivity)) { Assert.IsNotNull(stream); ToDoActivity result = cosmosDefaultJsonSerializer.FromStream <ToDoActivity>(stream); Assert.IsNotNull(result); Assert.AreEqual(this.toDoActivity.id, result.id); Assert.AreEqual(this.toDoActivity.taskNum, result.taskNum); Assert.AreEqual(this.toDoActivity.cost, result.cost); Assert.AreEqual(this.toDoActivity.description, result.description); Assert.AreEqual(this.toDoActivity.status, result.status); } }
public async Task StreamIteratorTest() { string containerName = Guid.NewGuid().ToString(); string partitionKeyPath = "/users"; ContainerResponse containerResponse = await this.cosmosDatabase.CreateContainerAsync(containerName, partitionKeyPath); Assert.AreEqual(HttpStatusCode.Created, containerResponse.StatusCode); Assert.AreEqual(containerName, containerResponse.Resource.Id); Assert.AreEqual(partitionKeyPath, containerResponse.Resource.PartitionKey.Paths.First()); containerName = Guid.NewGuid().ToString(); containerResponse = await this.cosmosDatabase.CreateContainerAsync(containerName, partitionKeyPath); Assert.AreEqual(HttpStatusCode.Created, containerResponse.StatusCode); Assert.AreEqual(containerName, containerResponse.Resource.Id); Assert.AreEqual(partitionKeyPath, containerResponse.Resource.PartitionKey.Paths.First()); HashSet <string> containerIds = new HashSet <string>(); FeedIterator resultSet = this.cosmosDatabase.GetContainerQueryStreamIterator( requestOptions: new QueryRequestOptions() { MaxItemCount = 1 }); while (resultSet.HasMoreResults) { using (ResponseMessage message = await resultSet.ReadNextAsync()) { Assert.AreEqual(HttpStatusCode.OK, message.StatusCode); CosmosJsonDotNetSerializer defaultJsonSerializer = new CosmosJsonDotNetSerializer(); dynamic containers = defaultJsonSerializer.FromStream <dynamic>(message.Content).DocumentCollections; foreach (dynamic container in containers) { string id = container.id.ToString(); containerIds.Add(id); } } } Assert.IsTrue(containerIds.Count > 0, "The iterator did not find any containers."); Assert.IsTrue(containerIds.Contains(containerName), "The iterator did not find the created container"); containerResponse = await containerResponse.Container.DeleteContainerAsync(); Assert.AreEqual(HttpStatusCode.NoContent, containerResponse.StatusCode); }
public async Task ContainerContractTest() { ClientEncryptionIncludedPath clientEncryptionIncludedPath1 = new ClientEncryptionIncludedPath() { Path = "/path", ClientEncryptionKeyId = "dekId", EncryptionAlgorithm = "AEAD_AES_256_CBC_HMAC_SHA256", EncryptionType = "Randomized" }; Collection <ClientEncryptionIncludedPath> paths = new Collection <ClientEncryptionIncludedPath>() { clientEncryptionIncludedPath1 }; ContainerProperties containerProperties = new ContainerProperties(Guid.NewGuid().ToString(), "/users") { IndexingPolicy = new IndexingPolicy() { Automatic = true, IndexingMode = IndexingMode.Consistent, IncludedPaths = new Collection <IncludedPath>() { new IncludedPath() { Path = "/*" } }, ExcludedPaths = new Collection <ExcludedPath>() { new ExcludedPath() { Path = "/test/*" } }, CompositeIndexes = new Collection <Collection <CompositePath> >() { new Collection <CompositePath>() { new CompositePath() { Path = "/address/city", Order = CompositePathSortOrder.Ascending }, new CompositePath() { Path = "/address/zipcode", Order = CompositePathSortOrder.Descending } } }, SpatialIndexes = new Collection <SpatialPath>() { new SpatialPath() { Path = "/address/spatial/*", SpatialTypes = new Collection <SpatialType>() { SpatialType.LineString } } } }, ClientEncryptionPolicy = new ClientEncryptionPolicy(paths) }; CosmosJsonDotNetSerializer serializer = new CosmosJsonDotNetSerializer(); Stream stream = serializer.ToStream(containerProperties); ContainerProperties deserialziedTest = serializer.FromStream <ContainerProperties>(stream); ContainerResponse response = await this.database.CreateContainerAsync(containerProperties); Assert.IsNotNull(response); Assert.IsTrue(response.RequestCharge > 0); Assert.IsNotNull(response.Headers); Assert.IsNotNull(response.Headers.ActivityId); ContainerProperties responseProperties = response.Resource; Assert.IsNotNull(responseProperties.Id); Assert.IsNotNull(responseProperties.ResourceId); Assert.IsNotNull(responseProperties.ETag); Assert.IsTrue(responseProperties.LastModified.HasValue); Assert.IsTrue(responseProperties.LastModified.Value > new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), responseProperties.LastModified.Value.ToString()); Assert.AreEqual(1, responseProperties.IndexingPolicy.IncludedPaths.Count); IncludedPath includedPath = responseProperties.IndexingPolicy.IncludedPaths.First(); Assert.AreEqual("/*", includedPath.Path); Assert.AreEqual("/test/*", responseProperties.IndexingPolicy.ExcludedPaths.First().Path); Assert.AreEqual(1, responseProperties.IndexingPolicy.CompositeIndexes.Count); Assert.AreEqual(2, responseProperties.IndexingPolicy.CompositeIndexes.First().Count); CompositePath compositePath = responseProperties.IndexingPolicy.CompositeIndexes.First().First(); Assert.AreEqual("/address/city", compositePath.Path); Assert.AreEqual(CompositePathSortOrder.Ascending, compositePath.Order); Assert.AreEqual(1, responseProperties.IndexingPolicy.SpatialIndexes.Count); SpatialPath spatialPath = responseProperties.IndexingPolicy.SpatialIndexes.First(); Assert.AreEqual("/address/spatial/*", spatialPath.Path); Assert.AreEqual(4, spatialPath.SpatialTypes.Count); // All SpatialTypes are returned Assert.AreEqual(1, responseProperties.ClientEncryptionPolicy.IncludedPaths.Count()); Assert.AreEqual(1, responseProperties.ClientEncryptionPolicy.PolicyFormatVersion); ClientEncryptionIncludedPath clientEncryptionIncludedPath = responseProperties.ClientEncryptionPolicy.IncludedPaths.First(); Assert.IsTrue(this.VerifyClientEncryptionIncludedPath(clientEncryptionIncludedPath1, clientEncryptionIncludedPath)); }
public async Task ContainerContractTest() { ContainerProperties containerProperties = new ContainerProperties(Guid.NewGuid().ToString(), "/users") { IndexingPolicy = new IndexingPolicy() { Automatic = true, IndexingMode = IndexingMode.Consistent, IncludedPaths = new Collection <IncludedPath>() { new IncludedPath() { Path = "/*" } }, ExcludedPaths = new Collection <ExcludedPath>() { new ExcludedPath() { Path = "/test/*" } }, CompositeIndexes = new Collection <Collection <CompositePath> >() { new Collection <CompositePath>() { new CompositePath() { Path = "/address/city", Order = CompositePathSortOrder.Ascending }, new CompositePath() { Path = "/address/zipcode", Order = CompositePathSortOrder.Descending } } }, SpatialIndexes = new Collection <SpatialPath>() { new SpatialPath() { Path = "/address/spatial/*", SpatialTypes = new Collection <SpatialType>() { SpatialType.LineString } } } } }; var serializer = new CosmosJsonDotNetSerializer(); Stream stream = serializer.ToStream(containerProperties); ContainerProperties deserialziedTest = serializer.FromStream <ContainerProperties>(stream); ContainerResponse response = await this.database.CreateContainerAsync(containerProperties); Assert.IsNotNull(response); Assert.IsTrue(response.RequestCharge > 0); Assert.IsNotNull(response.Headers); Assert.IsNotNull(response.Headers.ActivityId); ContainerProperties responseProperties = response.Resource; Assert.IsNotNull(responseProperties.Id); Assert.IsNotNull(responseProperties.ResourceId); Assert.IsNotNull(responseProperties.ETag); Assert.IsTrue(responseProperties.LastModified.HasValue); Assert.IsTrue(responseProperties.LastModified.Value > new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), responseProperties.LastModified.Value.ToString()); Assert.AreEqual(1, responseProperties.IndexingPolicy.IncludedPaths.Count); IncludedPath includedPath = responseProperties.IndexingPolicy.IncludedPaths.First(); Assert.AreEqual("/*", includedPath.Path); Assert.AreEqual("/test/*", responseProperties.IndexingPolicy.ExcludedPaths.First().Path); Assert.AreEqual(1, responseProperties.IndexingPolicy.CompositeIndexes.Count); Assert.AreEqual(2, responseProperties.IndexingPolicy.CompositeIndexes.First().Count); CompositePath compositePath = responseProperties.IndexingPolicy.CompositeIndexes.First().First(); Assert.AreEqual("/address/city", compositePath.Path); Assert.AreEqual(CompositePathSortOrder.Ascending, compositePath.Order); Assert.AreEqual(1, responseProperties.IndexingPolicy.SpatialIndexes.Count); SpatialPath spatialPath = responseProperties.IndexingPolicy.SpatialIndexes.First(); Assert.AreEqual("/address/spatial/*", spatialPath.Path); Assert.AreEqual(1, spatialPath.SpatialTypes.Count); Assert.AreEqual(SpatialType.LineString, spatialPath.SpatialTypes.First()); }
public async Task ContainerV2CompatTest() { string containerId = "SerializeContainerTest"; DocumentCollection documentCollection = new DocumentCollection() { Id = containerId, PartitionKey = new PartitionKeyDefinition() { Paths = new Collection <string>() { "/pkPath" } }, IndexingPolicy = new IndexingPolicy() { IncludedPaths = new Collection <IncludedPath>() { new IncludedPath() { Path = "/*" } }, CompositeIndexes = new Collection <Collection <CompositePath> >() { new Collection <CompositePath>() { new CompositePath() { Path = "/address/test/*", Order = CompositePathSortOrder.Ascending }, new CompositePath() { Path = "/address/test2/*", Order = CompositePathSortOrder.Ascending } } }, SpatialIndexes = new Collection <SpatialSpec>() { new SpatialSpec() { Path = "/name/first/*", SpatialTypes = new Collection <SpatialType>() { SpatialType.LineString } } } }, }; string documentJsonString = null; using (MemoryStream memoryStream = new MemoryStream()) { documentCollection.SaveTo(memoryStream); memoryStream.Position = 0; using (StreamReader sr = new StreamReader(memoryStream)) { documentJsonString = await sr.ReadToEndAsync(); } } Assert.IsNotNull(documentJsonString); string cosmosJsonString = null; using (MemoryStream memoryStream = new MemoryStream()) { documentCollection.SaveTo(memoryStream); memoryStream.Position = 0; CosmosJsonDotNetSerializer serializerCore = new CosmosJsonDotNetSerializer(); ContainerProperties containerProperties = serializerCore.FromStream <ContainerProperties>(memoryStream); Assert.IsNotNull(containerProperties); Assert.AreEqual(containerId, containerProperties.Id); using (Stream stream = serializerCore.ToStream <ContainerProperties>(containerProperties)) { using (StreamReader sr = new StreamReader(stream)) { cosmosJsonString = await sr.ReadToEndAsync(); } } } JObject jObjectDocumentCollection = JObject.Parse(documentJsonString); JObject jObjectContainer = JObject.Parse(cosmosJsonString); Assert.IsTrue(JToken.DeepEquals(jObjectDocumentCollection, jObjectContainer), $"v2:{documentJsonString}; v3:{cosmosJsonString}"); }