Exemple #1
0
        internal async Task <VersionRow> AddVersionAsync(string appName, string version, string fileHash)
        {
            var tableStorage = new AzureTableStorageProvider(storageAccount);

            var appVersion = new VersionRow(appName, version, fileHash);

            tableStorage.Add(VersionsTableName, appVersion);

            await tableStorage.SaveAsync();

            return(appVersion);
        }
Exemple #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);
        }
Exemple #3
0
        public async Task SaveAsync_TooManyOperationsForEGT_ThrowsInvalidOperationException()
        {
            string partitionKey = "123";

            _tableStorageProvider.Add(_tableName, new DecoratedItem {
                Id = partitionKey, Name = "200"
            });
            await _tableStorageProvider.SaveAsync();

            int expectedCount = 100;

            for (int i = 0; i < expectedCount; i++)
            {
                var item = new DecoratedItem {
                    Id = partitionKey, Name = i.ToString(CultureInfo.InvariantCulture)
                };
                _tableStorageProvider.Add(_tableName, item);
            }
            // this next insert should fail, canceling the whole transaction
            _tableStorageProvider.Add(_tableName, new DecoratedItem {
                Id = partitionKey, Name = "200"
            });

            try
            {
                await _tableStorageProvider.SaveAsync(Execute.Atomically);

                Assert.Fail("Should have thrown exception");
            }
            catch (InvalidOperationException)
            {
            }

            Assert.AreEqual(1, (await _tableStorageProvider.CreateQuery <DecoratedItem>(_tableName).PartitionKeyEquals(partitionKey).Async()).Count());
        }
Exemple #4
0
        public async Task Insert_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);


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

            Assert.AreEqual(expectedCount, items.Count());
        }