コード例 #1
0
        public void GetConnectionTest()
        {
            MSSQLDataService ds   = CreateMSSQLDataServiceForTests();
            IDbConnection    conn = ds.GetConnection();

            Assert.NotNull(conn);
        }
コード例 #2
0
        /// <summary>
        /// Метод для создания MSSQLDataService для целей тестирования.
        /// <remarks>Строка соединения не настоящая ("SERVER=server;Trusted_connection=yes;DATABASE=test;").</remarks>
        /// </summary>
        /// <returns>Сконструированный MSSQLDataService.</returns>
        public static MSSQLDataService CreateMSSQLDataServiceForTests()
        {
            var ds = new MSSQLDataService();

            ds.CustomizationString = "SERVER=server;Trusted_connection=yes;DATABASE=test;";
            return(ds);
        }
コード例 #3
0
        public void ConstructorMSSQLDataServiceWithSecurityManagerTest()
        {
            ISecurityManager securityManager = new EmptySecurityManager();
            var dataService = new MSSQLDataService(securityManager);

            Assert.NotNull(dataService);
        }
コード例 #4
0
        public void LoadingObjectLoadObjectsTest()
        {
            // TODO: Обработать после выполнения задачи 4009

            var dataService = new MSSQLDataService();

            dataService.CustomizationString = ConfigurationManager.ConnectionStrings["TestAppNormal"]
                                              .ConnectionString;

            // Создание тестовой записи.
            var тестовыйМедведь = new Медведь()
            {
                ПорядковыйНомер = 15, Вес = 39
            };

            dataService.UpdateObject(тестовыйМедведь);

            var view = new View {
                DefineClassType = typeof(Медведь)
            };

            view.AddProperties(
                new string[1]
            {
                "ВычислимоеПоле"
            });

            // Загрузка объектов.
            IQueryable <Медведь> dataМедведи =
                dataService.Query <Медведь>(view).Where(w => w.__PrimaryKey == тестовыйМедведь.__PrimaryKey);


            var lcs = LinqToLcs.GetLcs(dataМедведи.Expression, view);

            lcs.View         = view;
            lcs.LoadingTypes = new[] { typeof(Медведь) };
            lcs.ReturnType   = LcsReturnType.Objects;

            // Загрузка данных без создания объктов.
            var медведи = dataService.LoadObjects(lcs);

            Assert.True(1 == медведи.Length, "Запись должна быть одна.");
            foreach (var stringDataView in медведи)
            {
                int fieldSum = ((Медведь)stringDataView).ВычислимоеПоле;
                Assert.True(54 == fieldSum, "ВычислимоеПоле");
            }

            Assert.True(1 == dataМедведи.Count(), "Запись должна быть одна.");
            foreach (var медведь in dataМедведи)
            {
                Assert.True(1 == медведь.ВычислимоеПоле, "ВычислимоеПоле");
            }

            // Удаление тестовой записи.
            тестовыйМедведь.SetStatus(ObjectStatus.Deleted);
            dataService.UpdateObject(тестовыйМедведь);
        }
コード例 #5
0
        public void LoadingObjectLoadStringedObjectViewTest()
        {
            // TODO: Обработать после выполнения задачи 4009

            var dataService = new MSSQLDataService();

            dataService.CustomizationString = "SERVER=rtc-storm;Trusted_connection=yes;DATABASE=dochitka_test;";

            // Cоздание тестовой записи.
            var тестовыйМедведь = new Медведь()
            {
                ПорядковыйНомер = 15, Вес = 39
            };

            dataService.UpdateObject(тестовыйМедведь);

            var view = new View {
                DefineClassType = typeof(Медведь)
            };

            view.AddProperties(
                new string[1]
            {
                "ВычислимоеПоле"
            });

            // Загрузка объектов.
            IQueryable <Медведь> dataМедведи =
                dataService.Query <Медведь>(view).Where(w => w.__PrimaryKey == тестовыйМедведь.__PrimaryKey);


            var lcs = LinqToLcs.GetLcs(dataМедведи.Expression, view);

            lcs.View         = view;
            lcs.LoadingTypes = new[] { typeof(Медведь) };
            lcs.ReturnType   = LcsReturnType.Objects;

            // Загрузка данных без создания объктов.
            var медведи = dataService.LoadStringedObjectView('\t', lcs);

            Assert.True(1 == медведи.Length, "Запись должна быть одна.");
            foreach (var stringDataView in медведи)
            {
                int fieldSum = Int32.Parse(stringDataView.ObjectedData[0].ToString());
                Assert.True(54 == fieldSum, "ВычислимоеПоле");
            }

            Assert.True(1 == dataМедведи.Count(), "Запись должна быть одна.");
            foreach (var медведь in dataМедведи)
            {
                Assert.True(54 == медведь.ВычислимоеПоле, "ВычислимоеПоле");
            }

            // Удаление тестовой записи.
            тестовыйМедведь.SetStatus(ObjectStatus.Deleted);
            dataService.UpdateObject(тестовыйМедведь);
        }
コード例 #6
0
        public void GetIfNullExpressionEmptyArrayTest()
        {
            var exception = Xunit.Record.Exception(() =>
            {
                MSSQLDataService ds = CreateMSSQLDataServiceForTests();
                ds.GetIfNullExpression(new string[] { });
            });

            Assert.IsType(typeof(ArgumentException), exception);
        }
コード例 #7
0
        public void GetIfNullExpressionNullTest()
        {
            var exception = Xunit.Record.Exception(() =>
            {
                MSSQLDataService ds = CreateMSSQLDataServiceForTests();
                ds.GetIfNullExpression(null);
            });

            Assert.IsType(typeof(ArgumentNullException), exception);
        }
コード例 #8
0
        public void TranslateExpressionForXmlPathTest()
        {
            // Arrange.
            SQLDataService ds = new MSSQLDataService();
            bool           pointExistInSourceIdentifier;
            string         expectedResult = "(select '' as [@caption], [KP].[ФИО] as [@value] For XML PATH ('element'), TYPE)";

            // Act.
            string result = ds.TranslateExpression(expectedResult, string.Empty, "exteranlnamewithpoint.", out pointExistInSourceIdentifier);

            // Assert.
            Assert.Equal(string.Format("({0})", expectedResult), result);
        }
コード例 #9
0
        public void GetIfNullExpressionTest()
        {
            MSSQLDataService ds = CreateMSSQLDataServiceForTests();

            string exp = ds.GetIfNullExpression("identifier1", "identifier2");

            Assert.Equal("ISNULL(identifier1, identifier2)", exp);

            exp = ds.GetIfNullExpression("identifier3", "identifier4", "identifier5");
            Assert.Equal("ISNULL(identifier3, ISNULL(identifier4, identifier5))", exp);

            exp = ds.GetIfNullExpression("identifier6");
            Assert.Equal("identifier6", exp);

            exp = ds.GetIfNullExpression(string.Empty);
            Assert.Equal(string.Empty, exp);
        }
コード例 #10
0
        public void TranslateExpressionTest()
        {
            // Arrange.
            SQLDataService ds = new MSSQLDataService();
            bool           pointExistInSourceIdentifier;

            string expectedResult =
                "(select exteranlnamewithpoint.\"Фамилия\"+exteranlnamewithpoint.\"Имя\"+exteranlnamewithpoint.\"Отчество\" from TableName where primaryKey=StormMainObjectKey)";

            // Act.
            string result = ds.TranslateExpression(
                "select @Фамилия@+@Имя@+@Отчество@ from TableName where primaryKey=StormMainObjectKey", string.Empty,
                "exteranlnamewithpoint.", out pointExistInSourceIdentifier);

            // Assert.
            Assert.Equal(expectedResult, result);
        }
コード例 #11
0
        public void ConvertSimpleValueToQueryValueStringTest()
        {
            MSSQLDataService ds = CreateMSSQLDataServiceForTests();

            string val = ds.ConvertSimpleValueToQueryValueString(null);

            Assert.Equal("NULL", val);

            val = ds.ConvertSimpleValueToQueryValueString(string.Empty);
            Assert.Equal("NULL", val);

            val = ds.ConvertSimpleValueToQueryValueString("null");
            Assert.Equal("N'null'", val);

            var          dateTime          = new DateTime(2014, 01, 30, 16, 14, 20, 679);
            const string resDateTimeString = "'20140130 16:14:20.679'";

            val = ds.ConvertSimpleValueToQueryValueString(dateTime);
            Assert.Equal(resDateTimeString, val);

            var sysNullableDateTime = new DateTime?(dateTime);

            val = ds.ConvertSimpleValueToQueryValueString(sysNullableDateTime);
            Assert.Equal(resDateTimeString, val);

            var caseNullableDateTime = new NullableDateTime {
                Value = dateTime
            };

            val = ds.ConvertSimpleValueToQueryValueString(caseNullableDateTime);
            Assert.Equal(resDateTimeString, val);

            int intVal = 5;

            val = ds.ConvertSimpleValueToQueryValueString(intVal);
            Assert.Equal(intVal.ToString(CultureInfo.InvariantCulture), val);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="BaseIntegratedTest" /> class.
        /// </summary>
        /// <param name="tempDbNamePrefix">Prefix for temp database name.</param>
        protected BaseIntegratedTest(string tempDbNamePrefix)
        {
            Configuration            configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            string                   connectionStringsConfigSectionName = "connectionStrings";
            ConnectionStringsSection connectionStringsSection           = (ConnectionStringsSection)configuration.GetSection(connectionStringsConfigSectionName);

            if (!(tempDbNamePrefix != null))
            {
                throw new ArgumentNullException();
            }
            if (!(tempDbNamePrefix != string.Empty))
            {
                throw new ArgumentException();
            }
            if (!tempDbNamePrefix.All(char.IsLetterOrDigit))
            {
                throw new ArgumentException();
            }
            _tempDbNamePrefix = tempDbNamePrefix;
            _databaseName     = _tempDbNamePrefix + "_" + DateTime.Now.ToString("yyyyMMddHHmmssff") + "_" + Guid.NewGuid().ToString("N");
            if (!string.IsNullOrWhiteSpace(PostgresScript) && ConnectionStringPostgres != poolingFalseConst)
            {
                if (!(tempDbNamePrefix.Length <= 12)) // Max length is 63 (-18 -32).
                {
                    throw new ArgumentException();
                }
                if (!char.IsLetter(tempDbNamePrefix[0])) // Database names must have an alphabetic first character.
                {
                    throw new ArgumentException();
                }
                using (var conn = new NpgsqlConnection(ConnectionStringPostgres))
                {
                    conn.Open();
                    using (var cmd = new NpgsqlCommand(string.Format("CREATE DATABASE \"{0}\" ENCODING = 'UTF8' CONNECTION LIMIT = -1;", _databaseName), conn))
                        cmd.ExecuteNonQuery();
                }

                using (var conn = new NpgsqlConnection($"{ConnectionStringPostgres};Database={_databaseName}"))
                {
                    conn.Open();
                    using (var cmd = new NpgsqlCommand(PostgresScript, conn))
                        cmd.ExecuteNonQuery();
                    string connStr = $"{ConnectionStringPostgres};Database={_databaseName}";
                    PostgresDataService dataService = CreatePostgresDataService(connStr);
                    _dataServices.Add(dataService);

                    InitAuditService(dataService);

                    connectionStringsSection.ConnectionStrings.Add(new ConnectionStringSettings($"{dataService.AuditService.AppSetting.AppName}_{dataService.AuditService.AppSetting.AuditConnectionStringName}", connStr));
                }
            }

            if (!string.IsNullOrWhiteSpace(MssqlScript) && ConnectionStringMssql != poolingFalseConst)
            {
                if (!(tempDbNamePrefix.Length <= 64))// Max is 128.
                {
                    throw new ArgumentException();
                }
                using (var connection = new SqlConnection(ConnectionStringMssql))
                {
                    connection.Open();
                    using (var command = new SqlCommand($"CREATE DATABASE {_databaseName} COLLATE Cyrillic_General_CI_AS", connection))
                        command.ExecuteNonQuery();
                }

                using (var connection = new SqlConnection($"{ConnectionStringMssql};Database={_databaseName}"))
                {
                    connection.Open();
                    using (var command = new SqlCommand(MssqlScript, connection))
                    {
                        command.CommandTimeout = 180;
                        command.ExecuteNonQuery();
                    }

                    string           connStr     = $"{ConnectionStringMssql};Database={_databaseName}";
                    MSSQLDataService dataService = CreateMssqlDataService(connStr);
                    _dataServices.Add(dataService);
                    InitAuditService(dataService);
                    connectionStringsSection.ConnectionStrings.Add(new ConnectionStringSettings($"{dataService.AuditService.AppSetting.AppName}_{dataService.AuditService.AppSetting.AuditConnectionStringName}", connStr));
                }
            }

            if (!string.IsNullOrWhiteSpace(OracleScript) && ConnectionStringOracle != poolingFalseConst)
            {
                if (!(tempDbNamePrefix.Length <= 8)) // Max length is 30 (-18 -4).
                {
                    throw new ArgumentException();
                }

                using (var connection = new OracleConnection(ConnectionStringOracle))
                {
                    connection.Open();
                    using (var command = connection.CreateCommand())
                    {
                        // "CREATE USER" privileges required.
                        var doWhile = true;
                        while (doWhile)
                        {
                            _tmpUserNameOracle  = tempDbNamePrefix + "_" + DateTime.Now.ToString("yyyyMMddHHmmssff") + "_" + new Random().Next(9999);
                            command.CommandText = $"CREATE USER {_tmpUserNameOracle} IDENTIFIED BY {_tmpUserNameOracle} DEFAULT TABLESPACE users  quota unlimited on users  TEMPORARY TABLESPACE temp";
                            try
                            {
                                command.ExecuteNonQuery();
                            }
                            catch (OracleException ex)
                            {
                                Thread.Sleep(1000);
                                if (ex.Message.Contains("conflicts with another user or role name "))
                                {
                                    continue;
                                }
                                throw;
                            }

                            doWhile = false;
                        }

                        // "CREATE SESSION WITH ADMIN OPTION" privileges required.
                        command.CommandText = $"GRANT CREATE SESSION TO {_tmpUserNameOracle}";
                        command.ExecuteNonQuery();
                        command.CommandText = $"GRANT CREATE TABLE TO {_tmpUserNameOracle}";
                        command.ExecuteNonQuery();
                    }
                }

                using (var connection = new OracleConnection($"{ConnectionStringOracleDataSource};User Id={_tmpUserNameOracle};Password={_tmpUserNameOracle};"))
                {
                    connection.Open();
                    using (var command = connection.CreateCommand())
                    {
                        foreach (var cmdText in OracleScript.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                        {
                            command.CommandText = cmdText.Trim();
                            if (!string.IsNullOrWhiteSpace(command.CommandText))
                            {
                                command.ExecuteNonQuery();
                            }
                        }

                        string            connStr     = $"{ConnectionStringOracleDataSource};User Id={_tmpUserNameOracle};Password={_tmpUserNameOracle};";
                        OracleDataService dataService = CreateOracleDataService(connStr);
                        _dataServices.Add(dataService);
                        InitAuditService(dataService);
                        connectionStringsSection.ConnectionStrings.Add(new ConnectionStringSettings($"{dataService.AuditService.AppSetting.AppName}_{dataService.AuditService.AppSetting.AuditConnectionStringName}", connStr));
                    }
                }
            }

            configuration.Save();
            ConfigurationManager.RefreshSection(connectionStringsConfigSectionName);
        }