public void CanThrowExceptionWhenUnknownDatabase()
        {
            string fullPath;
            var    isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("Testfile.cnf", FileMode.OpenOrCreate, isoStore))
            {
                using (StreamWriter writer = new StreamWriter(isoStream))
                {
                    writer.WriteLine("[mysqldump]");
                    writer.WriteLine("user=test");
                    writer.WriteLine("password=test");
                }

                var fieldInfo = isoStream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic);
                Assert.True(fieldInfo != null);
                fullPath = fieldInfo.GetValue(isoStream).ToString();
            }

            _options.database = "unknown";
            _options.port     = 3305;
            var mysqldump = new MySqlDumpFacade(_options, _saveToFile, fullPath);

            mysqldump._dumpFilePath = Path.GetFullPath(@"..\..\..\..\..\Dependencies\MySql\mysqldump.exe");

            mysqldump.ProcessRequest(_saveToFile);

            var errors = mysqldump.ErrorsOutput.ToString();

            Assert.True(errors.Contains("mysqldump: Got error: 1044: Access denied for user 'test'@'localhost' to database 'unknown' when selecting the database"));
        }
        public void CanDumpAListOfDatabases()
        {
            string fullPath;

            var isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("Testfile.cnf", FileMode.OpenOrCreate, isoStore))
            {
                using (StreamWriter writer = new StreamWriter(isoStream))
                {
                    writer.WriteLine("[mysqldump]");
                    writer.WriteLine("user=test");
                    writer.WriteLine("password=test");
                }

                var fieldInfo = isoStream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic);
                Assert.True(fieldInfo != null);
                fullPath = fieldInfo.GetValue(isoStream).ToString();
            }

            var databases = new List <string>();

            databases.Add("DumpTest");
            databases.Add("SecondTest");
            databases.Add("ThirdTest");
            foreach (var database in databases)
            {
                _options.database = database;
                _options.port     = 3305;
                var mysqldump = new MySqlDumpFacade(_options, _saveToFile, fullPath);
                mysqldump._dumpFilePath = Path.GetFullPath(@"..\..\..\..\..\Dependencies\MySql\mysqldump.exe");

                mysqldump.ProcessRequest(_saveToFile);

                if (File.Exists(_saveToFile))
                {
                    using (var dump = new StreamReader(_saveToFile))
                    {
                        var content = dump.ReadToEnd();
                        Assert.True(content.Contains(database), "A database is missed in the dump file");
                    }
                }
                if (!string.IsNullOrEmpty(mysqldump.ErrorsOutput.ToString()))
                {
                    Assert.False(true, "CanDumpAListOfDatabases: Test Failed");
                }
            }
        }
        public void CanLoadAllOptions()
        {
            var testOptions = new MySqlDbExportOptions();

            testOptions.no_data        = true;
            testOptions.insert_ignore  = true;
            testOptions.ignore_table   = "nameoftable";
            testOptions.routines       = true;
            testOptions.lock_tables    = true;
            testOptions.port           = 3305;
            testOptions.allow_keywords = true;

            string fullPath;

            var isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("Testfile.cnf", FileMode.OpenOrCreate, isoStore))
            {
                using (StreamWriter writer = new StreamWriter(isoStream))
                {
                    writer.WriteLine("[mysqldump]");
                    writer.WriteLine("user=test;");
                    writer.WriteLine("password=test;");
                }

                var fieldInfo = isoStream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic);
                Assert.True(fieldInfo != null);
                fullPath = fieldInfo.GetValue(isoStream).ToString();
            }

            var mysqldumpFacade = new MySqlDumpFacade(testOptions, _saveToFile, fullPath);
            var arguments       = mysqldumpFacade.GetType().GetField("_arguments", BindingFlags.NonPublic | BindingFlags.Instance);

            if (arguments != null)
            {
                isoStore.DeleteFile("Testfile.cnf");
                isoStore.Close();

                string expected = @"--add-drop-database  --add-drop-table  --add-locks=false  --all-databases=false  --allow-keywords  --comments  --compact=false  --complete-insert=false  --create-options  --databases  --default-character-set=utf8 --delayed-insert=false  --disable-keys  --events=false  --extended-insert  --flush-logs=false  --hex-blob=false  --ignore-table=nameoftable --insert-ignore  --lock-tables  --no-data  --no-create-info=false  --max_allowed_packet=1G --order-by-primary=false  --port=3305 --quote-names  --replace=false  --routines  --single-transaction=false  --set-gtid-purged=OFF  """;
                var    value    = arguments.GetValue(mysqldumpFacade);
                Assert.True(value.ToString().Contains(expected));
            }
        }
        public void CanDoDumpFileForDb()
        {
            string fullPath;
            var    isoStore = IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);

            using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("Testfile.cnf", FileMode.OpenOrCreate, isoStore))
            {
                using (StreamWriter writer = new StreamWriter(isoStream))
                {
                    writer.WriteLine("[mysqldump]");
                    writer.WriteLine("user=test");
                    writer.WriteLine("password=test");
                }

                var fieldInfo = isoStream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic);
                Assert.True(fieldInfo != null);
                fullPath = fieldInfo.GetValue(isoStream).ToString();
            }

            _options.database = "DumpTest";
            _options.port     = 3305;
            var mysqldump = new MySqlDumpFacade(_options, _saveToFile, fullPath);

            mysqldump._dumpFilePath = Path.GetFullPath(@"..\..\..\..\..\Dependencies\MySql\mysqldump.exe");

            mysqldump.ProcessRequest(_saveToFile);

            if (File.Exists(_saveToFile))
            {
                using (var dump = new StreamReader(_saveToFile))
                {
                    var content = dump.ReadToEnd();
                    Assert.True(content.Contains("DumpTest"), "A database is missed in the dump file");
                }
            }
        }