Exemplo n.º 1
0
        public async Task Delete_101EntitiesInTheSamePartition_ShouldSucceed()
        {
            string partitionKey  = "123";
            int    expectedCount = 101;

            for (int i = 0; i < expectedCount; i++)
            {
                var item = new DecoratedItem
                {
                    Id   = partitionKey,
                    Name = i.ToString(CultureInfo.InvariantCulture)
                };
                _tableStorageProvider.Add(_tableName, item);
            }
            await _tableStorageProvider.SaveAsync(Execute.InBatches);

            for (int i = 0; i < expectedCount; i++)
            {
                _tableStorageProvider.Delete(_tableName, partitionKey, i.ToString(CultureInfo.InvariantCulture));
            }


            await _tableStorageProvider.SaveAsync(Execute.InBatches);


            IEnumerable <DecoratedItem> items = (await _tableStorageProvider.CreateQuery <DecoratedItem>(_tableName).PartitionKeyEquals(partitionKey).Async());

            Assert.IsFalse(items.Any());
        }
Exemplo n.º 2
0
        internal async Task <PackageTag> AddPackageVersionAsync(string name, string tag, string versionChanges, string fileHash)
        {
            var tableStorage = new AzureTableStorageProvider(storageAccount);

            if (name == Package.PACKAGES_PARTITION_NAME)
            {
                throw new ArgumentException($"{name} is reserved");
            }

            Package package = new Package(name, tag, fileHash);

            tableStorage.Upsert(PackagesTableName, package); // save as Packages | name@tag

            List <PackageTag> allTags = await GetAllEntitiesFromPartitionAsync <PackageTag>(PackagesTableName, name);

            if (allTags.Any())
            {
                if (allTags.Any(t => t.Tag == tag) && allTags.First().Tag != tag) //tag already exist and it is not last
                {
                    throw new ArgumentException($"Tag {tag} already exist and it is not last");
                }
                else if (allTags.First().Tag == tag)
                {
                    IEnumerable <PackageChange> packageChanges = await GetAllEntitiesFromPartitionAsync <PackageChange>(PackagesFileChangesTableName, name);

                    foreach (var prevChange in packageChanges.Where(c => c.Tag == tag))
                    {
                        tableStorage.Delete(PackagesFileChangesTableName, prevChange);
                    }
                    tableStorage.Delete(PackagesTableName, allTags.First());
                }
            }

            PackageTag packageVersion = new PackageTag(name, tag, fileHash);

            tableStorage.Upsert(PackagesTableName, packageVersion); //save as name | timestamp (tag, hash)

            JObject versionInfoJO = JObject.Parse(versionChanges);

            foreach (var fileEntry in versionInfoJO["files"])
            {
                string path       = fileEntry["path"].Value <string>();
                string hash       = fileEntry["hash"].Value <string>();
                string changeType = fileEntry["editType"].Value <string>();
                tableStorage.Add(PackagesFileChangesTableName, new PackageChange(name, tag, path, hash, changeType));
            }

            await tableStorage.SaveAsync();

            return(packageVersion);
        }