示例#1
0
        public async Task AzureStorageProvider_Save()
        {
            //ClearAzureTable( PartitionKey ).Wait();

            XDocument schema = AzureTableStorageProvider.GetDefaultSchema();

            TelemetryClient client = new TelemetryClient();
            ErrorReport     report;

            try {
                throw new GenericException(ErrorCode.GENERIC_CRITICAL_ERROR, "Test Exception Message");
            } catch (Exception e) {
                report = new ErrorReport(e);
                client.AddActiveReport(report);
            }

            await client.UploadActiveReportsAsync(AzureStorageEmulator);

            TableQuery <DynamicTableEntity> retrieve = new TableQuery <DynamicTableEntity>().Where(
                TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, PartitionKey)
                );

            //var entities = AzureStorageEmulator.StorageTable.ExecuteQuerySegmentedAsync( retrieve, null );
            //return StorageTable.ExecuteAsync( BuildInsertOperation( report ) ).AsTask();

            //Assert.AreEqual( report.ActivityTime.ToString( "o" ), ( await entities ).First().Properties["_ActivityTime"].StringValue );

            //ClearAzureTable( PartitionKey ).Wait();
        }
示例#2
0
        public void AzureStorageProvider_Initialize()
        {
            XDocument schema = AzureTableStorageProvider.GetDefaultSchema();

            AzureTableStorageProvider storage = new AzureTableStorageProvider(new AzureStorageAccountSettings {
                ConnectionString    = "UseDevelopmentStorage=true",
                TableName           = "reports",
                DefaultPartitionKey = "test",
                SchemaDefinition    = schema
            });
        }
示例#3
0
        public void Schema_Load()
        {
            XDocument schema = AzureTableStorageProvider.GetDefaultSchema();

            Assert.IsNotNull(schema);

            var columns = schema.Descendants("Column").ToList();

            Assert.IsNotNull(columns[0]);
            Assert.IsNotNull(columns[0].Element("AzureColumnName"));
        }
示例#4
0
        internal async Task <VersionRow> GetLastVersion()
        {
            var tableStorage = new AzureTableStorageProvider(storageAccount);
            var topVersion   = await tableStorage.CreateQuery <VersionRow>(VersionsTableName).Top(1).Async();

            if (topVersion.Any())
            {
                return(topVersion.First());
            }

            return(null);
        }
示例#5
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);
        }
示例#6
0
        public async Task <Package> GetPackageByNameAndTagAsync(string name)
        {
            var tableStorage = new AzureTableStorageProvider(storageAccount);

            try
            {
                return(await tableStorage.GetAsync <Package>(PackagesTableName, Package.PACKAGES_PARTITION_NAME, name));
            }
            catch (EntityDoesNotExistException)
            {
                return(null);
            }
        }
示例#7
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);
        }
示例#8
0
        public void TestInitialize()
        {
            ICloudStorageAccount storageAccount = Configuration.GetTestStorageAccount();

            _tableStorageProvider = new AzureTableStorageProvider(storageAccount);

            _client = new CloudTableClient(new Uri(storageAccount.TableEndpoint), storageAccount.Credentials);

            _tableName = _baseTableName + Guid.NewGuid().ToString().Replace("-", string.Empty);

            var table = _client.GetTableReference(_tableName);

            table.CreateAsync().Wait();
        }
示例#9
0
        public void AzureStorageProvider_SAS_Save()
        {
            XDocument schema = AzureTableStorageProvider.GetDefaultSchema();

            TelemetryClient client = new TelemetryClient();
            ErrorReport     report;

            try {
                throw new GenericException(ErrorCode.GENERIC_CRITICAL_ERROR, "Test Exception Message");
            } catch (Exception e) {
                report = new ErrorReport(e);
                client.AddActiveReport(report);
            }

            client.UploadActiveReportsAsync(AzureTestStorage_SAS).Wait();
        }
示例#10
0
        public ActionResult Index(SubmitEmail model)
        {
            if (ModelState.IsValid)
            {
                var connectionString     = GlobalConfig.GetString("BylditStorageAccountConnectionString");
                var storageAccount       = CloudStorageAccount.Parse(connectionString);
                var tableStorageProvider = new AzureTableStorageProvider(new CloudStorageAccountAdapter(storageAccount));
                var emailTableName       = GlobalConfig.GetString("SubmitEmailTableName");

                storageAccount.CreateCloudTableClient().GetTableReference(emailTableName).CreateIfNotExists();

                tableStorageProvider.Upsert(emailTableName, model);
                tableStorageProvider.Save();

                model.Submitted = true;
            }

            return(View(model));
        }
示例#11
0
        private async Task <List <T> > GetAllEntitiesFromPartitionAsync <T>(string tableName, string partitionName) where T : Model.ITableEntity, new()
        {
            List <T> result = new List <T>();

            var tableStorage = new AzureTableStorageProvider(storageAccount);

            string lastRowKey = string.Empty;

            while (true)
            {
                IEnumerable <T> entities = null;
                if (string.IsNullOrEmpty(lastRowKey))
                {
                    entities = await tableStorage
                               .CreateQuery <T>(tableName)
                               .PartitionKeyEquals(partitionName)
                               .Top(1000).Async();
                }
                else
                {
                    entities = await tableStorage
                               .CreateQuery <T>(tableName)
                               .PartitionKeyEquals(partitionName)
                               .RowKeyFrom(lastRowKey).Exclusive()
                               .Top(1000).Async();
                }

                result.AddRange(entities);

                if (entities.Count() < 1000)
                {
                    break;
                }
                else
                {
                    lastRowKey = entities.Last().RowKey;
                }
            }

            return(result);
        }
示例#12
0
        internal async Task <List <VersionRow> > GetLastVersions(int count)
        {
            var tableStorage = new AzureTableStorageProvider(storageAccount);

            return((await tableStorage.CreateQuery <VersionRow>(VersionsTableName).Top(count).Async()).ToList());
        }