Example #1
0
        public void test_RestoreManager_to_xml()
        {
            Console.WriteLine("Testing RestoreManager.to_xml()");

            var restore_manager = new RestoreManager();

            restore_manager.set_default_destination("temp", @"E:\temp\temp3");
            restore_manager.add_restore(new Restore("disk", @"E:\temp\temp2", "a b"));
            restore_manager.add_restore(new Restore("aws", @"xxxxxxxx", "a b"));

            Console.WriteLine(restore_manager.to_xml());
            Console.WriteLine();
        }
Example #2
0
        public void test_RestoreManager()
        {
            // Test settings:
            // The index of the restore object(s) to use:
            int[] restore_indices = { 1 };

            // The restored file gets its own file name registration, at:
            string file_name_reg_path = @"E:\temp\temp\ignore\fnr2.tsv";

            // At the very end, this test compares two directories
            string dir1_path = @"E:\temp\temp";  // the original directory
            string dir2_path = @"E:\temp\temp3"; // the restored directory

            Console.WriteLine("Testing RestoreManager.");

            var cloud_backup_services = create_cloud_backup_services_from_xml(cloud_backup_services_xml);
            var key_manager           = new BasicKeyManager(key_manager_xml);

            var restore_manager = new RestoreManager(restore_xml, cloud_backup_services,
                                                     key_manager, handle_app_events);

            // Print restore names
            Console.WriteLine("Restore names:");
            string[] restore_names = restore_manager.get_restore_names();
            foreach (var name in restore_names)
            {
                Console.WriteLine("  " + name);
            }
            Console.WriteLine();

            // Get Info about the restores
            Console.Write("Getting info on: ");
            foreach (var i in restore_indices)
            {
                Console.Write(restore_names[i] + " ");
            }
            Console.WriteLine();

            // To run the restore_manager.get_info(...) on a separate thread, use
            // the background manager.
            var file_name_reg  = new FileNameRegistration(file_name_reg_xml);
            var backup_manager = new BackupManager(backup_xml, file_name_reg,
                                                   cloud_backup_services, key_manager, handle_app_events);

            backup_manager.get_restore_info(restore_manager, restore_indices, skip_file_names: false);

            // Create a RestoreSettings settings object and then initiate a restore
            var restore_settings = new RestoreSettings();

            if (File.Exists(file_name_reg_path))
            {
                File.Delete(file_name_reg_path);
            }
            restore_settings.file_name_reg = new FileNameRegistration(file_name_reg_path);

            restore_settings.indices = restore_indices;
            restore_settings.restore_destination_lookup = restore_manager.default_destinations;

            Console.WriteLine("Starting restore.");
            backup_manager.restore(restore_manager, restore_settings);

            wait_for_backup_manager_thread_to_quit(backup_manager);

            // Code gets here after user hit "s" key to stop the backup manager thread.
            Console.WriteLine("\nComparing directories:");
            compare_directories(dir1_path, dir2_path);

            Console.WriteLine("\n");
        }
Example #3
0
        private static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;

            var commandName = string.Empty;
            var commandArgs = new List <string>();

            if (args.Length >= 1)
            {
                for (var i = 0; i < args.Length; i++)
                {
                    if (i == 0)
                    {
                        commandName = args[i];
                    }
                    else
                    {
                        commandArgs.Add(args[i]);
                    }
                }
            }

            Console.WriteLine("Welcome to SiteServer Cli Tool");
            Console.WriteLine();

            try
            {
                if (StringUtils.EqualsIgnoreCase(commandName, BackupManager.CommandName))
                {
                    BackupManager.Execute(commandArgs.ToArray());
                }
                else if (StringUtils.EqualsIgnoreCase(commandName, RestoreManager.CommandName))
                {
                    RestoreManager.Execute(commandArgs.ToArray());
                }
                else if (StringUtils.EqualsIgnoreCase(commandName, UpdateManager.CommandName))
                {
                    UpdateManager.Execute(commandArgs.ToArray());
                }
                else if (StringUtils.EqualsIgnoreCase(commandName, VersionManager.CommandName))
                {
                    VersionManager.Execute(commandArgs.ToArray());
                }
                else
                {
                    CliUtils.PrintLine();
                    CliUtils.PrintRow("Usage");
                    CliUtils.PrintLine();
                    BackupManager.PrintUsage();
                    RestoreManager.PrintUsage();
                    UpdateManager.PrintUsage();
                    VersionManager.PrintUsage();
                    CliUtils.PrintLine();
                    CliUtils.PrintRow("http://www.siteserver.cn/docs/cli");
                    CliUtils.PrintLine();
                    Console.ReadLine();
                }
            }
            catch (Exception ex)
            {
                CliUtils.PrintError(ex.Message);
                CliUtils.LogErrors(commandName, new List <TextLogInfo> {
                    new TextLogInfo
                    {
                        DateTime  = DateTime.Now,
                        Detail    = "Console Error",
                        Exception = ex
                    }
                });
            }
        }
        public void BasicFullBackupScenario1()
        {
            var dbName             = "basic_scenario_one";
            var backupFile         = "";
            var testConfigFileName = tmpFolder + "BasicScenario1.ini";

            var parser = new FileIniDataParser();
            var config = parser.ReadFile(defaultConfigIni);

            config["sqlserver"].SetKeyData(new KeyData("database")
            {
                Value = dbName
            });

            parser.WriteFile(testConfigFileName, config);

            var conn = new SqlConnection(string.Format("Server={0};Database=master;Trusted_Connection=True;", config["sqlserver"]["server"]));

            conn.Open();

            try
            {
                // Create the database and insert some data
                conn.Execute("create database " + dbName);
                conn.ChangeDatabase(dbName);
                conn.Execute("create table test1 (test1 varchar(50))");
                conn.Execute("insert into test1 values ('data')");

                // Backup the database
                var backupManager = new BackupManager();
                var backupResult  = backupManager.Backup(new string[2] {
                    "full", testConfigFileName
                });

                Assert.AreEqual(0, backupResult.ReturnCode);
                Assert.IsFalse(File.Exists(backupFile));

                // Drop the database
                conn.ChangeDatabase("master");
                conn.Execute("drop database " + dbName);

                // Restore the backup from S3
                var restoreMan = new RestoreManager();

                restoreMan.Restore(new string[2] {
                    testConfigFileName, backupResult.BackupName
                });

                var awsProfile = config["aws"]["profile"];

                Amazon.Util.ProfileManager.RegisterProfile(awsProfile, config["aws"]["access_key"], config["aws"]["secret_key"]);

                var creds = Amazon.Util.ProfileManager.GetAWSCredentials(awsProfile);

                var awsClient = new AmazonS3Client(creds, Amazon.RegionEndpoint.USEast1);

                conn.ChangeDatabase(dbName);
                var result = conn.Query("select test1 from test1 where test1 = 'data'");

                Assert.IsTrue(result.Count() == 1);

                var listReq = new ListObjectsRequest()
                {
                    BucketName = config["aws"]["bucket"]
                };

                var objects = awsClient.ListObjects(listReq);

                foreach (var obj in objects.S3Objects)
                {
                    if (obj.Key.IndexOf(dbName) != -1)
                    {
                        var delReq = new DeleteObjectRequest()
                        {
                            BucketName = config["aws"]["bucket"], Key = obj.Key
                        };

                        awsClient.DeleteObject(delReq);
                    }
                }
            }
            finally
            {
                conn.ChangeDatabase("master");
                conn.Execute("drop database " + dbName);

                if (File.Exists(backupFile))
                {
                    File.Delete(backupFile);
                }
            }
        }
        public void BasicIncrementalBackupScenario2()
        {
            var dbName             = "basic_scenario_two";
            var backupFile         = "";
            var testConfigFileName = tmpFolder + "BasicScenario2.ini";

            var parser = new FileIniDataParser();
            var config = parser.ReadFile(defaultConfigIni);

            config["sqlserver"].SetKeyData(new KeyData("database")
            {
                Value = dbName
            });

            parser.WriteFile(testConfigFileName, config);

            var conn = new SqlConnection(string.Format("Server={0};Database=master;Trusted_Connection=True;", config["sqlserver"]["server"]));

            conn.Open();

            var logBackups = new List <string>();

            try
            {
                // Create the database and insert some data
                conn.Execute("create database " + dbName);
                conn.Execute("alter database " + dbName + " set recovery full");
                conn.ChangeDatabase(dbName);
                conn.Execute("create table test1 (test1 varchar(50))");
                conn.Execute("insert into test1 values ('data_full')");

                // Backup the database
                var backupManager = new BackupManager();
                var backupResult  = backupManager.Backup(new string[2] {
                    "full", testConfigFileName
                });

                Assert.AreEqual(0, backupResult.ReturnCode);
                Assert.IsFalse(File.Exists(backupResult.BackupName));

                // Do incremental stuff
                for (int i = 1; i <= 3; i++)
                {
                    // The minimum increment is a second between log backups
                    System.Threading.Thread.Sleep(1000);
                    conn.Execute(string.Format("insert into test1 values ('data_log_{0}')", i));

                    var backupLogResult = backupManager.Backup(new string[2] {
                        "incremental", testConfigFileName
                    });

                    Assert.AreEqual(0, backupLogResult.ReturnCode);
                    Assert.IsFalse(File.Exists(backupLogResult.BackupName));

                    logBackups.Add(backupLogResult.BackupName);
                }

                // Drop the database
                conn.ChangeDatabase("master");
                conn.Execute("drop database " + dbName);

                // Restore the backup using the restore manager
                var restoreMan = new RestoreManager();

                var argList = new List <string>()
                {
                    testConfigFileName, backupResult.BackupName
                };

                argList.AddRange(logBackups);

                restoreMan.Restore(argList.ToArray());

                // Verify that the restore worked
                conn.ChangeDatabase(dbName);
                var result = conn.Query("select test1 from test1 where test1 in ('data_full', 'data_log_1', 'data_log_2', 'data_log_3')");

                Assert.IsTrue(result.Count() == 4);
            }
            finally
            {
                // Cleanup our mess
                // S3
                var awsProfile = config["aws"]["profile"];
                Amazon.Util.ProfileManager.RegisterProfile(awsProfile, config["aws"]["access_key"], config["aws"]["secret_key"]);
                var creds     = Amazon.Util.ProfileManager.GetAWSCredentials(awsProfile);
                var awsClient = new AmazonS3Client(creds, Amazon.RegionEndpoint.USEast1);
                var listReq   = new ListObjectsRequest()
                {
                    BucketName = config["aws"]["bucket"]
                };

                var objects = awsClient.ListObjects(listReq);

                foreach (var obj in objects.S3Objects)
                {
                    if (obj.Key.IndexOf(dbName) != -1)
                    {
                        var delReq = new DeleteObjectRequest()
                        {
                            BucketName = config["aws"]["bucket"], Key = obj.Key
                        };

                        awsClient.DeleteObject(delReq);
                    }
                }

                // Testing database server
                conn.ChangeDatabase("master");
                conn.Execute("drop database " + dbName);

                if (File.Exists(backupFile))
                {
                    File.Delete(backupFile);
                }
            }
        }
Example #6
0
    void Awake()
    {
        _Instance = this;

        DontDestroyOnLoad(gameObject);
    }