public async Task PartitionedCRUDTest() { 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()); CosmosContainerSettings settings = new CosmosContainerSettings(containerName, partitionKeyPath) { IndexingPolicy = new Cosmos.IndexingPolicy() { IndexingMode = Cosmos.IndexingMode.None, Automatic = false } }; CosmosContainer cosmosContainer = containerResponse; containerResponse = await cosmosContainer.ReplaceAsync(settings); Assert.AreEqual(HttpStatusCode.OK, containerResponse.StatusCode); Assert.AreEqual(containerName, containerResponse.Resource.Id); Assert.AreEqual(partitionKeyPath, containerResponse.Resource.PartitionKey.Paths.First()); Assert.AreEqual(Cosmos.IndexingMode.None, containerResponse.Resource.IndexingPolicy.IndexingMode); Assert.IsFalse(containerResponse.Resource.IndexingPolicy.Automatic); containerResponse = await cosmosContainer.ReadAsync(); Assert.AreEqual(HttpStatusCode.OK, containerResponse.StatusCode); Assert.AreEqual(containerName, containerResponse.Resource.Id); Assert.AreEqual(Cosmos.PartitionKeyDefinitionVersion.V2, containerResponse.Resource.PartitionKeyDefinitionVersion); Assert.AreEqual(partitionKeyPath, containerResponse.Resource.PartitionKey.Paths.First()); Assert.AreEqual(Cosmos.IndexingMode.None, containerResponse.Resource.IndexingPolicy.IndexingMode); Assert.IsFalse(containerResponse.Resource.IndexingPolicy.Automatic); containerResponse = await containerResponse.Container.DeleteAsync(); Assert.AreEqual(HttpStatusCode.NoContent, containerResponse.StatusCode); }
public async Task TimeToLivePropertyPath() { string containerName = Guid.NewGuid().ToString(); string partitionKeyPath = "/user"; int timeToLivetimeToLiveInSeconds = 10; CosmosContainerSettings setting = new CosmosContainerSettings() { Id = containerName, PartitionKey = new PartitionKeyDefinition() { Paths = new Collection <string> { partitionKeyPath }, Kind = PartitionKind.Hash }, TimeToLivePropertyPath = "/creationDate", }; ContainerResponse containerResponse = null; try { containerResponse = await this.cosmosDatabase.CreateContainerIfNotExistsAsync(setting); Assert.Fail("CreateColleciton with TtlPropertyPath and with no DefaultTimeToLive should have failed."); } catch (CosmosException exeption) { // expected because DefaultTimeToLive was not specified Assert.AreEqual(HttpStatusCode.BadRequest, exeption.StatusCode); } // Verify the container content. setting.DefaultTimeToLive = timeToLivetimeToLiveInSeconds; containerResponse = await this.cosmosDatabase.CreateContainerIfNotExistsAsync(setting); CosmosContainer cosmosContainer = containerResponse; Assert.AreEqual(timeToLivetimeToLiveInSeconds, containerResponse.Resource.DefaultTimeToLive); Assert.AreEqual("/creationDate", containerResponse.Resource.TimeToLivePropertyPath); //verify removing the ttl property path setting.TimeToLivePropertyPath = null; containerResponse = await cosmosContainer.ReplaceAsync(setting); cosmosContainer = containerResponse; Assert.AreEqual(timeToLivetimeToLiveInSeconds, containerResponse.Resource.DefaultTimeToLive); Assert.IsNull(containerResponse.Resource.TimeToLivePropertyPath); //adding back the ttl property path setting.TimeToLivePropertyPath = "/creationDate"; containerResponse = await cosmosContainer.ReplaceAsync(setting); cosmosContainer = containerResponse; Assert.AreEqual(containerResponse.Resource.TimeToLivePropertyPath, "/creationDate"); //Creating an item and reading before expiration var payload = new { id = "testId", user = "******", creationDate = ToEpoch(DateTime.UtcNow) }; ItemResponse <dynamic> createItemResponse = await cosmosContainer.CreateItemAsync <dynamic>(payload); Assert.IsNotNull(createItemResponse.Resource); Assert.AreEqual(createItemResponse.StatusCode, HttpStatusCode.Created); ItemResponse <dynamic> readItemResponse = await cosmosContainer.ReadItemAsync <dynamic>(new Cosmos.PartitionKey(payload.user), payload.id); Assert.IsNotNull(readItemResponse.Resource); Assert.AreEqual(readItemResponse.StatusCode, HttpStatusCode.OK); containerResponse = await cosmosContainer.DeleteAsync(); Assert.AreEqual(HttpStatusCode.NoContent, containerResponse.StatusCode); }