public void TestFilterExceptions()
        {
            Filter f1 = new Filter("PartitionKey", "Bad", "Test", "");

            Assert.False(Filter.IsValidFilter(f1));

            List <Filter> filters = new List <Filter>();

            filters.Add(f1);

            BackupAzureTables bu = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);
            var exception        = Assert.Throws <ParameterSpecException>(() => bu.BackupTableToFile("TestTable", "baddir", false, false, 30, filters));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exception));
            Assert.Contains("One or more of the supplied filter criteria is invalid.", exception.ToString());

            var exceptionBlob = Assert.Throws <BackupFailedException>(() => bu.BackupTableToBlob("TestTable", "blobroot", "baddir", false, false, 30, 30, filters));

            Assert.Contains("One or more of the supplied filter criteria is invalid.", exceptionBlob.ToString());

            DeleteAzureTables instanceDelete = new DeleteAzureTables(AzureStorageConfigConnection);

            var exceptionDeleteRows = Assert.Throws <ParameterSpecException>(() => instanceDelete.DeleteAzureTableRows("XX", 30, filters));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exceptionDeleteRows));
            Assert.Contains("One or more of the supplied filter criteria is invalid.", exceptionDeleteRows.ToString());
        }
Exemplo n.º 2
0
        public void TestBackupToBlob()
        {
            BackupAzureTables  instanceBackup  = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);
            CopyAzureTables    instanceCopy    = new CopyAzureTables(AzureStorageConfigConnection);
            DeleteAzureTables  instanceDelete  = new DeleteAzureTables(AzureStorageConfigConnection);
            RestoreAzureTables instanceRestore = new RestoreAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);

            InitializeTables(instanceDelete, instanceRestore, FileNamePathThatExists_SystemLogs);

            List <Filter> Filters = new List <Filter>();

            Filters.Add(new Filter("RowKey", "=", "User1"));
            Filters.Add(new Filter("RowKey", "=", "User2", "OR"));

            string copySetup       = instanceCopy.CopyTableToTable(TableNameFrom, TableNameTo, 30);
            int    InitialRowCount = ExtractNextInt(copySetup, "total records");

            string backupToBlob = instanceBackup.BackupTableToBlob(TableNameFrom, BlobRoot, WorkingDirectory, true, true, 10, 10);
            //int BackupRowCount = ExtractNextInt(backupToBlob, "total records");

            //Need to restore to confirm
            string restoreResult = instanceRestore.RestoreTableFromBlob(TableNameRestoreTo, TableNameFrom, BlobRoot, WorkingDirectory, ExtractFileName(backupToBlob), 30);

            string copyVerify     = instanceCopy.CopyTableToTable(TableNameRestoreTo, TableNameTo2, 30);
            int    VerifyRowCount = ExtractNextInt(copyVerify, "total records");

            Assert.Equal(InitialRowCount, VerifyRowCount);
        }
        public void TestBackupParameterExceptions()
        {
            BackupAzureTables instanceBackup = new BackupAzureTables(AzureStorageConfigConnection);

            var exceptionToFileTableMissing = Assert.Throws <ParameterSpecException>(() => instanceBackup.BackupTableToFile("", "baddir"));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exceptionToFileTableMissing));
            Assert.Contains("TableName is missing.", exceptionToFileTableMissing.ToString());

            var exceptionToFileOutDirMissing = Assert.Throws <ParameterSpecException>(() => instanceBackup.BackupTableToFile("XX", ""));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exceptionToFileOutDirMissing));
            Assert.Contains("OutFileDirectory is missing.", exceptionToFileOutDirMissing.ToString());

            var exceptionToBlobTableMissing = Assert.Throws <ParameterSpecException>(() => instanceBackup.BackupTableToBlob("", "badroot", "baddir"));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exceptionToBlobTableMissing));
            Assert.Contains("TableName is missing.", exceptionToBlobTableMissing.ToString());

            var exceptionToBlobBlobRootMissing = Assert.Throws <ParameterSpecException>(() => instanceBackup.BackupTableToBlob("XX", "", "baddir"));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exceptionToBlobBlobRootMissing));
            Assert.Contains("BlobRoot is missing.", exceptionToBlobBlobRootMissing.ToString());

            var exceptionToBlobOutDirMissing = Assert.Throws <ParameterSpecException>(() => instanceBackup.BackupTableToBlob("XX", "XX", ""));

            Assert.True(typeof(ParameterSpecException).IsInstanceOfType(exceptionToBlobOutDirMissing));
            Assert.Contains("OutFileDirectory is missing.", exceptionToBlobOutDirMissing.ToString());
        }
        public void TestBackupServerNotRunning()
        {
            BackupAzureTables bu = new BackupAzureTables(ConnectionSpecNoServer, AzureBlobStorageConfigConnection);

            Assert.Throws <BackupFailedException>(() => bu.BackupTableToFile(DefaultTableName, WorkingDirectory, false, false, 5));

            bu = new BackupAzureTables(AzureStorageConfigConnection, ConnectionSpecNoServer);
            Assert.Throws <BackupFailedException>(() => bu.BackupTableToBlob(DefaultTableName, DefaultBlobRoot, WorkingDirectory, false, false, 30, 5));
        }
        public void TestBackupBadConnSpec()
        {
            BackupAzureTables bu = new BackupAzureTables(BadConnectionSpec, AzureBlobStorageConfigConnection);

            Assert.Throws <ConnectionException>(() => bu.BackupTableToFile(DefaultTableName, WorkingDirectory, false, false, 5));

            bu = new BackupAzureTables(AzureStorageConfigConnection, BadConnectionSpec);
            Assert.Throws <ConnectionException>(() => bu.BackupTableToBlob(DefaultTableName, DefaultBlobRoot, WorkingDirectory, false, false, 5, 5));
        }
        public static void Run([TimerTrigger("0 0 7 * * *", RunOnStartup = true)] TimerInfo myTimer, ILogger log, ExecutionContext context)
        {
            var backupCs = Environment.GetEnvironmentVariable("BackupStorageConnectionString");
            var targetCs = Environment.GetEnvironmentVariable("TargetStorageConnectionString");

            var backup = new BackupAzureTables(backupCs, targetCs);

            backup.BackupTableToBlobDirect("characters", "backups", true);
            backup.BackupTableToBlobDirect("users", "backups", true);
        }
        public void TestBackupBadDir()
        {
            BackupAzureTables bu = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);

            Assert.Throws <ParameterSpecException>(() => bu.BackupTableToFile("TestTable", "baddir", false));

            var exception = Assert.Throws <BackupFailedException>(() => bu.BackupTableToBlob(DefaultTableName, DefaultBlobRoot, "baddir", false, false, 30));

            Assert.Contains("ParameterSpecException", exception.InnerException.ToString());
        }
        public void TestBackupOutfileDirectoryDoesNotExist()
        {
            BackupAzureTables bu = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);
            var exception1       = Assert.Throws <ParameterSpecException>(() => bu.BackupTableToFile("TestTable", DirectoryDoesNotExist, false));

            Assert.Contains("OutFileDirectory does not exist", exception1.ToString());

            var exception2 = Assert.Throws <ParameterSpecException>(() => bu.BackupTableToBlob(DefaultTableName, DefaultBlobRoot, DirectoryDoesNotExist, false, false, 30));

            Assert.Contains("OutFileDirectory does not exist", exception2.ToString());
        }
        private string Backup(SecureString AzureBlobStorageConfigConnection, SecureString AzureStorageConfigConnection, IConfiguration config)
        {
            try
            {
                BackupAzureTables me = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);

                string Target = GetFromParmOrFile(config, TargetParmName).ToLower();
                if (!String.IsNullOrEmpty(Target))
                {
                    var           sectionFilters = config.GetSection("Filters");
                    List <Filter> filters        = sectionFilters.Get <List <Filter> >();

                    if (!Filter.AreFiltersValid(filters))
                    {
                        throw new Exception("One or more of the supplied filter cirteria is invalid.");
                    }

                    if (Target.Contains("file"))
                    {
                        return(me.BackupTableToFile(GetFromParmOrFile(config, TableNameParmName),
                                                    GetFromParmOrFile(config, OutFileDirectoryParmName),
                                                    GetBoolFromParmOrFile(config, CompressParmName),
                                                    GetBoolFromParmOrFile(config, ValidateParmName),
                                                    GetIntFromParmOrFile(config, TimeoutSecondsParmName),
                                                    filters));
                    }
                    else if (Target.Contains("blob"))
                    {
                        return(me.BackupTableToBlob(GetFromParmOrFile(config, TableNameParmName),
                                                    GetFromParmOrFile(config, BlobRootParmName),
                                                    GetFromParmOrFile(config, OutFileDirectoryParmName),
                                                    GetBoolFromParmOrFile(config, CompressParmName),
                                                    GetBoolFromParmOrFile(config, ValidateParmName),
                                                    GetIntFromParmOrFile(config, RetentionDaysParmName),
                                                    GetIntFromParmOrFile(config, TimeoutSecondsParmName),
                                                    filters));
                    }
                    else
                    {
                        throw new Exception("Missing or invalid configuration for requested command.");
                    }
                }
                else
                {
                    throw new Exception("Missing or invalid configuration for requested command.");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 10
0
        public void TestBackupAllTables()
        {
            BackupAzureTables  instanceBackup  = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);
            RestoreAzureTables instanceRestore = new RestoreAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);

            string restoreResult1 = instanceRestore.RestoreTableFromFile(TableNameTo, FileNamePathThatExists_UserProfile);
            int    RestoreCount1  = ExtractNextInt(restoreResult1, "Successful;", "entries");

            string restoreResult2 = instanceRestore.RestoreTableFromFile(TableNameTo2, FileNamePathThatExists_SystemLogs);
            int    RestoreCount2  = ExtractNextInt(restoreResult2, "Successful;", "entries");

            string Expected1       = String.Format("Table '{0}' backed up as", TableNameTo);
            string Expected2       = String.Format("Table '{0}' backed up as", TableNameTo2);
            string backupallresult = instanceBackup.BackupAllTablesToBlob(BlobDirectRoot, true, 10, 10);

            Assert.Contains(Expected1, backupallresult.ToString());
            Assert.Contains(Expected2, backupallresult.ToString());
        }
Exemplo n.º 11
0
        public void TestBackupToBlobDirect_LargeFile()
        {
            BackupAzureTables  instanceBackup  = new BackupAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);
            CopyAzureTables    instanceCopy    = new CopyAzureTables(AzureStorageConfigConnection);
            DeleteAzureTables  instanceDelete  = new DeleteAzureTables(AzureStorageConfigConnection);
            RestoreAzureTables instanceRestore = new RestoreAzureTables(AzureStorageConfigConnection, AzureBlobStorageConfigConnection);

            InitializeTables(instanceDelete, instanceRestore, FileNamePathThatExists_SystemLogs_LargeFile);

            string copySetup       = instanceCopy.CopyTableToTable(TableNameFrom, TableNameTo, 30);
            int    InitialRowCount = ExtractNextInt(copySetup, "total records");

            string backupToBlob   = instanceBackup.BackupTableToBlobDirect(TableNameFrom, BlobRoot, true, 10, 10);
            int    BackupRowCount = ExtractNextInt(backupToBlob, "total records");

            //Need to restore to confirm
            string restoreResult = instanceRestore.RestoreTableFromBlobDirect(TableNameRestoreTo, TableNameFrom, BlobRoot, ExtractFileName(backupToBlob), 30);

            string copyVerify     = instanceCopy.CopyTableToTable(TableNameRestoreTo, TableNameTo2, 30);
            int    VerifyRowCount = ExtractNextInt(copyVerify, "total records");

            Assert.Equal(InitialRowCount, VerifyRowCount);
        }
Exemplo n.º 12
0
        public void TestDeleteRows_LargeFile()
        {
            BackupAzureTables  instanceBackup  = new BackupAzureTables(AzureStorageConfigConnection, AzureStorageConfigConnection);
            CopyAzureTables    instanceCopy    = new CopyAzureTables(AzureStorageConfigConnection);
            DeleteAzureTables  instanceDelete  = new DeleteAzureTables(AzureStorageConfigConnection);
            RestoreAzureTables instanceRestore = new RestoreAzureTables(AzureStorageConfigConnection, AzureStorageConfigConnection);

            InitializeTables(instanceDelete, instanceRestore, FileNamePathThatExists_SystemLogs_LargeFile);

            string copySetup       = instanceCopy.CopyTableToTable(TableNameFrom, TableNameTo, 30);
            int    InitialRowCount = ExtractNextInt(copySetup, "total records");

            List <Filter> DeleteFilters = new List <Filter>();

            DeleteFilters.Add(new Filter("PartitionKey", "=", "WebAppLog"));
            string DeleteResult = instanceDelete.DeleteAzureTableRows(TableNameTo, 30, DeleteFilters);
            int    DeleteCount  = ExtractNextInt(DeleteResult, "total rows deleted");

            string copyVerify        = instanceCopy.CopyTableToTable(TableNameTo, TableNameTo2, 30);
            int    RemainingRowCount = ExtractNextInt(copyVerify, "total records");

            Assert.Equal(InitialRowCount, DeleteCount + RemainingRowCount);
        }