Example #1
0
        private static void RunAcl(ProgramArguments arguments)
        {
            var entities    = SystemStartTests.CreateTestEntities();
            var groups      = SystemStartTests.CreateTestGroups();
            var memberships = Tools.CreateInMemoryMembershipTable(groups);
            var aces        = SystemStartTests.CreateTestAces();
            var storage     = new DatabaseStorage {
                Aces = aces, Memberships = memberships, Entities = entities, Messages = new List <Tuple <int, DateTime, byte[]> >()
            };

            var securitySystem = StartTheSystem(new MemoryDataProvider(storage));

            var ctx = new SecurityContext(TestUser.User2, securitySystem);
            // ReSharper disable once NotAccessedVariable
            var ok = ctx.HasPermission(1, PermissionType.See);

            new AclEditor(ctx)
            .Allow(1, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(2, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(5, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(14, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(50, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(51, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(52, TestUser.User3.Id, false, PermissionType.Custom10)
            .Apply();
            // ReSharper disable once RedundantAssignment
            ok = ctx.HasPermission(52, PermissionType.See);

            _started = DateTime.UtcNow;

            Task.Run(() => AclExercise1(0, securitySystem));
            var _ = Enumerable.Range(1, arguments.Agents).Select(x => Task.Run(() => AclExercise(x, securitySystem))).ToArray();
        }
        public void RepositoryStart_NodeObservers_EnableMore()
        {
            var dbProvider = new InMemoryDataProvider();

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .UseSecurityDataProvider(new MemoryDataProvider(DatabaseStorage.CreateEmpty()))
                              .UseSearchEngine(new InMemorySearchEngine(GetInitialIndex()))
                              .UseElevatedModificationVisibilityRuleProvider(new ElevatedModificationVisibilityRule())
                              .UseCacheProvider(new EmptyCache())
                              .DisableNodeObservers()
                              .EnableNodeObservers(typeof(TestNodeObserver1), typeof(TestNodeObserver2))
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.AreEqual(2, Providers.Instance.NodeObservers.Length);
                Assert.IsTrue(Providers.Instance.NodeObservers.Any(no => no.GetType() == typeof(TestNodeObserver1)));
                Assert.IsTrue(Providers.Instance.NodeObservers.Any(no => no.GetType() == typeof(TestNodeObserver2)));
            }
        }
Example #3
0
        public void ImplicitTransactionsOnStoreAndTrash()
        {
            using (var conn = SQLitePortability.CreateConnection()) {
                conn.Open();

                IDatabaseDetails details = new SQLiteDetails();
                IDatabaseAccess  db      = new DatabaseAccess(conn, details);
                IKeyAccess       keys    = new KeyUtil();
                DatabaseStorage  storage = new DatabaseStorage(details, db, keys);
                IBeanFactory     factory = new BeanFactory();
                IBeanCrud        crud    = new BeanCrud(storage, db, keys, factory);

                storage.EnterFluidMode();

                var bean = crud.Dispense <ThrowingBean>();
                bean["foo"] = "ok";
                var id = crud.Store(bean);

                bean.Throw  = true;
                bean["foo"] = "fail";

                try { crud.Store(bean); } catch { }
                Assert.Equal("ok", db.Cell <string>(true, "select foo from test where id = {0}", id));

                try { crud.Trash(bean); } catch { }
                Assert.True(db.Cell <int>(true, "select count(*) from test") > 0);
            }
        }
Example #4
0
        public void ImplicitTransactionsOnStoreAndTrash()
        {
            using(var conn = SQLitePortability.CreateConnection()) {
                conn.Open();

                IDatabaseDetails details = new SQLiteDetails();
                IDatabaseAccess db = new DatabaseAccess(conn, details);
                IKeyAccess keys = new KeyUtil();
                DatabaseStorage storage = new DatabaseStorage(details, db, keys);
                IBeanCrud crud = new BeanCrud(storage, db, keys);

                storage.EnterFluidMode();

                var bean = crud.Dispense<ThrowingBean>();
                bean["foo"] = "ok";
                var id = crud.Store(bean);

                bean.Throw = true;
                bean["foo"] = "fail";

                try { crud.Store(bean); } catch { }
                Assert.Equal("ok", db.Cell<string>(true, "select foo from test where id = {0}", id));

                try { crud.Trash(bean); } catch { }
                Assert.True(db.Cell<int>(true, "select count(*) from test") > 0);
            }
        }
Example #5
0
        private static void RunACL(ProgramArguments arguments)
        {
            var entities    = SystemStartTests.CreateTestEntities();
            var groups      = SystemStartTests.CreateTestGroups();
            var memberships = Tools.CreateInMemoryMembershipTable(groups);
            var aces        = SystemStartTests.CreateTestAces();
            var storage     = new DatabaseStorage {
                Aces = aces, Memberships = memberships, Entities = entities, Messages = new List <Tuple <int, DateTime, byte[]> >()
            };

            StartTheSystem(new MemoryDataProvider(storage));

            var ctx = new SecurityContextForConcurrencyTests(TestUser.User2);
            var ok  = ctx.HasPermission(1, PermissionType.See);

            AclEditor.Create(ctx)
            .Allow(1, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(2, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(5, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(14, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(50, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(51, TestUser.User3.Id, false, PermissionType.Custom10)
            .Allow(52, TestUser.User3.Id, false, PermissionType.Custom10)
            .Apply();
            ok = ctx.HasPermission(52, PermissionType.See);

            started = DateTime.UtcNow;

            Task.Run(() => ACLExercise1(0));
            Enumerable.Range(1, arguments.Agents).Select(x => Task.Run(() => ACLExercise(x))).ToArray();
        }
        public void RepositoryStart_NodeObservers_DisableAll()
        {
            var dbProvider = new InMemoryDataProvider();

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseSharedLockDataProviderExtension(new InMemorySharedLockDataProvider())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .UseAccessTokenDataProviderExtension(new InMemoryAccessTokenDataProvider())
                              .UseSearchEngine(new InMemorySearchEngine(GetInitialIndex()))
                              .UseSecurityDataProvider(new MemoryDataProvider(DatabaseStorage.CreateEmpty()))
                              .UseTestingDataProviderExtension(new InMemoryTestingDataProvider())
                              .UseElevatedModificationVisibilityRuleProvider(new ElevatedModificationVisibilityRule())
                              .UseCacheProvider(new EmptyCache())
                              .DisableNodeObservers()
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.IsFalse(Providers.Instance.NodeObservers.Any());
            }
        }
        public void RepositoryStart_NodeObservers_EnableOne()
        {
            var dbProvider = new InMemoryDataProvider();

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseSharedLockDataProviderExtension(new InMemorySharedLockDataProvider())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .AddBlobProvider(new InMemoryBlobProvider())
                              .UseAccessTokenDataProviderExtension(new InMemoryAccessTokenDataProvider())
                              .UseSearchEngine(new InMemorySearchEngine(GetInitialIndex()))
                              .UseSecurityDataProvider(new MemoryDataProvider(DatabaseStorage.CreateEmpty()))
                              .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                              .UseTestingDataProviderExtension(new InMemoryTestingDataProvider())
                              .UseElevatedModificationVisibilityRuleProvider(new ElevatedModificationVisibilityRule())
                              .UseCacheProvider(new EmptyCache())
                              .DisableNodeObservers()
                              .EnableNodeObservers(typeof(TestNodeObserver1))
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");


            using (Repository.Start(repoBuilder))
            {
                Assert.AreEqual(1, Providers.Instance.NodeObservers.Length);
                Assert.AreEqual(typeof(TestNodeObserver1), Providers.Instance.NodeObservers[0].GetType());
            }
        }
        public void RepositoryStart_NodeObservers_DisableOne()
        {
            var dbProvider = new InMemoryDataProvider();

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .UseSecurityDataProvider(new MemoryDataProvider(DatabaseStorage.CreateEmpty()))
                              .UseSearchEngine(new InMemorySearchEngine(GetInitialIndex()))
                              .UseElevatedModificationVisibilityRuleProvider(new ElevatedModificationVisibilityRule())
                              .UseCacheProvider(new EmptyCache())
                              .DisableNodeObservers(typeof(TestNodeObserver1))
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.IsFalse(Providers.Instance.NodeObservers.Any(no => no.GetType() == typeof(TestNodeObserver1)));

                //TODO: currently this does not work, because observers are enabled/disabled globally.
                // Itt will, when we move to a per-thread environment in tests.
                //Assert.IsTrue(Providers.Instance.NodeObservers.Any(no => no.GetType() == typeof(TestNodeObserver2)));
            }
        }
        public void RepositoryStart_DataProviderExtensions_OverrideDefault()
        {
            var dbProvider         = new InMemoryDataProvider();
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            // switch this ON here for testing purposes (to check that repo start does not override it)
            SnTrace.Custom.Enabled = true;

            // switch this ON here for testing purposes (to check that repo start does not override it)
            SnTrace.Custom.Enabled = true;

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .UseAccessTokenDataProviderExtension(new TestAccessTokenDataProvider()) // ACTION: set test provider
                              .UseSecurityDataProvider(securityDbProvider)
                              .UseSearchEngine(searchEngine)
                              .UseAccessProvider(accessProvider)
                              .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.AreEqual(typeof(TestAccessTokenDataProvider), DataStore.GetDataProviderExtension <IAccessTokenDataProviderExtension>().GetType());
            }
        }
        /// <summary>
        /// Adds the security service to the collection.
        /// </summary>
        public static IServiceCollection AddSenseNetSecurity(this IServiceCollection services,
                                                             Action <SecurityConfiguration> configureSecurity = null,
                                                             Action <MessagingOptions> configureMessaging     = null)
        {
            // custom or default configuration
            if (configureSecurity != null)
            {
                services.Configure(configureSecurity);
            }
            else
            {
                services.Configure <SecurityConfiguration>(config => { });
            }

            if (configureMessaging != null)
            {
                services.Configure(configureMessaging);
            }
            else
            {
                services.Configure <MessagingOptions>(config => { });
            }

            services
            .AddInMemorySecurityDataProvider(DatabaseStorage.CreateEmpty())
            .AddSecurityMissingEntityHandler <MissingEntityHandler>()
            .AddDefaultSecurityMessageSenderManager()
            .AddDefaultSecurityMessageProvider();

            return(services);
        }
Example #11
0
        /// <summary>
        /// 将按','隔开的文本数据导入到数据库,约定:
        /// 1. 文本文件包含第一行列名,且不必导入
        /// 2. 文本文件第二行起即为数据
        /// 3. 数据库连接取config文件中第一个连接串
        /// 4. 待导入表名即schema文件名
        /// 5. 导入前会清空表数据
        /// 6. 分隔符','在schema文件中定义
        /// </summary>
        /// <param name="sourcePath">源数据文件的绝对物理路径</param>
        /// <param name="schemaPath">schema文件的绝对物理路径</param>
        /// <param name="message">如返回值为false, 则包含失败信息, 否则可忽略</param>
        /// <returns></returns>
        public bool TransferCSVFileToDatabase(string sourcePath, string schemaPath, out string message)
        {
            message = string.Empty;
            if (string.IsNullOrEmpty(sourcePath))
            {
                message = "数据文件路径为空";
                return(false);
            }
            if (!File.Exists(sourcePath))
            {
                message = string.Format("数据文件路径[{0}]不存在", sourcePath);
                return(false);
            }

            if (string.IsNullOrEmpty(schemaPath))
            {
                message = "schema文件路径为空";
                return(false);
            }
            if (!File.Exists(schemaPath))
            {
                message = string.Format("schema文件路径[{0}]不存在", schemaPath);
                return(false);
            }

            bool result;

            using (IntegrationEngine target = new IntegrationEngine())
            {
                DelimitedFileStorage sourceProvider = new DelimitedFileStorage("sourceProvider");
                target.Providers.Add(sourceProvider);
                DatabaseStorage destinationProvider = new DatabaseStorage("destinationProvider");
                target.Providers.Add(destinationProvider);

                IDictionary state3 = new Hashtable();
                state3["sourceProvider"]                      = IntegrationMode.GetSchema | IntegrationMode.GetData;
                state3["destinationProvider"]                 = IntegrationMode.TransferData;
                state3[ContextState.SourcePath]               = sourcePath;
                state3[ContextState.SchemaFilePath]           = schemaPath;
                state3[ContextState.FlatFileSkipFirstLine]    = true;
                state3[ContextState.FlatFileSkipLastLine]     = false;
                state3[ContextState.DatabaseConnectionString] = ConfigurationManager.ConnectionStrings[0].ConnectionString;
                state3[ContextState.DatabaseTableName]        = GetTableNameFromSchemaFileName(schemaPath);
                state3[ContextState.DatabaseTruncateTable]    = true;

                try
                {
                    result = target.Run(state3);
                }
                catch (System.Exception ex)
                {
                    result  = false;
                    message = ex.Message;
                }
            }
            return(result);
        }
Example #12
0
        static void Main(string[] args)
        {
            //---- Ensure test data
            var entities    = SystemStartTests.CreateTestEntities();
            var groups      = SystemStartTests.CreateTestGroups();
            var memberships = Tools.CreateInMemoryMembershipTable(groups);
            var aces        = SystemStartTests.CreateTestAces();
            var storage     = new DatabaseStorage {
                Aces = aces, Memberships = memberships, Entities = entities
            };

            //---- Start the system
            Context.StartTheSystem(new MemoryDataProvider(storage));

            //---- Start the request
            var context = new Context(TestUser.User1);


            //======== Test
            var channel = context.Security.MessageProvider;

            channel.MessageReceived  += new MessageReceivedEventHandler(MessageReceived);
            channel.SendException    += new SendExceptionEventHandler(SendException);
            channel.ReceiveException += new ReceiveExceptionEventHandler(ReceiveException);

            Console.WriteLine("S<enter>: sent test, <enter>: clear screen, X<enter>: exit...");
            Console.WriteLine("Receiver: " + channel.ReceiverName);
            while (true)
            {
                var s = Console.ReadLine();
                if ("S" == s.ToUpper())
                {
                    channel.SendMessage(new PingMessage());
                    Console.WriteLine("A ping message was sent.");
                    //var activity = new Transperfect.Infrastructure.Security.Messaging.SecurityMessages.BreakInheritanceActivity(Id("E2"));
                    var activity = new SenseNet.Security.Messaging.SecurityMessages.SetAclActivity(
                        acls: new[] { new AclInfo(1) },
                        breaks: new List <int>(),
                        unbreaks: new List <int>()
                        );
                    activity.Execute(context.Security);
                }
                else if ("X" == s.ToUpper())
                {
                    break;
                }
                else if ("" == s)
                {
                    Console.Clear();
                    Console.WriteLine("S<enter>: sent test, <enter>: clear screen, X<enter>: exit...");
                    Console.WriteLine("Receiver: " + channel.ReceiverName);
                }
            }

            channel.ShutDown();
        }
Example #13
0
        public static void CheckLongToDouble(IDatabaseAccess db, DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var bigLong = Int64.MinValue + 12345;
            var longID  = storage.Store("foo", MakeRow("p", bigLong));

            storage.Store("foo", MakeRow("p", Math.PI));
            Assert.Equal(bigLong, db.Cell <long>(false, "select p from foo where id = {0}", longID));
        }
        public DatabaseStorageTests_SQLite()
        {
            _conn = SQLitePortability.CreateConnection();
            _conn.Open();

            IDatabaseDetails details = new SQLiteDetails();

            _db      = new DatabaseAccess(_conn, details);
            _keys    = new KeyUtil();
            _storage = new DatabaseStorage(details, _db, _keys);
        }
Example #15
0
        public DatabaseStorageTests_PgSql(PgSqlConnectionFixture fixture)
        {
            _fixture = fixture;
            _fixture.SetUpDatabase();

            var details = new PgSqlDetails();

            _db      = new DatabaseAccess(_fixture.Connection, details);
            _keys    = new KeyUtil();
            _storage = new DatabaseStorage(details, _db, _keys);
        }
        public DatabaseStorageTests_MariaDb(MariaDbConnectionFixture fixture)
        {
            _fixture = fixture;
            _fixture.SetUpDatabase();

            var details = new MariaDbDetails();

            _db      = new DatabaseAccess(_fixture.Connection, details);
            _keys    = new KeyUtil();
            _storage = new DatabaseStorage(details, _db, _keys);
            _api     = new BeanApi(_fixture.Connection);
        }
Example #17
0
        // read -> compare -> change -> write -> read -> compare -> rollback -> write
        public void ReadLine_WriteTest()
        {
            DatabaseStorage <int, string> storage = new DatabaseStorage <int, string>();
            List <Word> words    = storage.ReadLine(42, 5);
            Word        word42   = words[0];
            Employee    employee = (Employee)Util.ByteArrayToObject(word42.Buffer);

            Assert.AreEqual(int.Parse(employee.UserID), 42);
            Assert.IsTrue(employee.NationalIDNumber.SequenceEqual("339712426      "));
            Assert.IsTrue(employee.LoginID.SequenceEqual(@"adventure-works\james0"));
            Assert.AreEqual(employee.OrganizationLevel, 4);
            Assert.IsTrue(employee.JobTitle.SequenceEqual("Production Technician - WC60                      "));
            Assert.AreEqual(employee.BirthDate, DateTime.Parse("1978-08-26"));
            Assert.IsTrue(employee.MaritalStatus.SequenceEqual("M"));
            Assert.IsTrue(employee.Gender.SequenceEqual("M"));
            Assert.AreEqual(employee.HireDate, DateTime.Parse("2003-01-28"));
            Assert.AreEqual(employee.VacationHours, 39);
            Assert.AreEqual(employee.SickLeaveHours, 39);

            // temporarily change values
            employee.SickLeaveHours   = 50;
            employee.NationalIDNumber = "123456789      ";

            byte[] buf = Util.ObjectToByteArray(employee);

            storage.WriteWord(42, buf);

            List <Word> wordsWritten  = storage.ReadLine(42, 5);
            Word        word42Written = wordsWritten[0];

            Employee employeeWritten = (Employee)Util.ByteArrayToObject(word42Written.Buffer);

            Assert.AreEqual(int.Parse(employeeWritten.UserID), 42);
            Assert.IsTrue(employeeWritten.NationalIDNumber.SequenceEqual("123456789      "));
            Assert.IsTrue(employeeWritten.LoginID.SequenceEqual(@"adventure-works\james0"));
            Assert.AreEqual(employeeWritten.OrganizationLevel, 4);
            Assert.IsTrue(employeeWritten.JobTitle.SequenceEqual("Production Technician - WC60                      "));
            Assert.AreEqual(employeeWritten.BirthDate, DateTime.Parse("1978-08-26"));
            Assert.IsTrue(employeeWritten.MaritalStatus.SequenceEqual("M"));
            Assert.IsTrue(employeeWritten.Gender.SequenceEqual("M"));
            Assert.AreEqual(employeeWritten.HireDate, DateTime.Parse("2003-01-28"));
            Assert.AreEqual(employeeWritten.VacationHours, 39);
            Assert.AreEqual(employeeWritten.SickLeaveHours, 50);

            // rollback original values
            employeeWritten.SickLeaveHours   = 39;
            employeeWritten.NationalIDNumber = "339712426      ";
            buf = Util.ObjectToByteArray(employeeWritten);

            storage.WriteWord(42, buf);
        }
Example #18
0
        public static void CheckStoringNull(DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var row = MakeRow("p", 1);
            var id  = storage.Store("foo", row);

            row      = storage.Load("foo", id);
            row["p"] = null;
            storage.Store("foo", row);

            row = storage.Load("foo", id);
            Assert.Null(row["p"]);
        }
Example #19
0
        private void SeasonSelector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox cb = (ComboBox)sender;

            int ind = cb.SelectedIndex;

            if (ind < 0)
            {
                return;
            }
            var seasontext = ((TextBlock)cb.Items[ind]).Text;
            int sn         = Int32.Parse(seasontext.Replace("Season ", ""));
            Dictionary <int, string> episodes = DatabaseStorage.GetEpisodesForSeason(CurrentClickedShow, sn);
        }
        public void RepositoryStart_NamedProviders()
        {
            var dbProvider         = new InMemoryDataProvider();
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            // switch this ON here for testing purposes (to check that repo start does not override it)
            SnTrace.Custom.Enabled = true;

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .AddBlobProvider(new InMemoryBlobProvider())
                              .UseSecurityDataProvider(securityDbProvider)
                              .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                              .UseSearchEngine(searchEngine)
                              .UseAccessProvider(accessProvider)
                              .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.AreSame(dbProvider, Providers.Instance.DataStore.DataProvider);
                Assert.AreEqual(searchEngine, SearchManager.SearchEngine);
                Assert.AreEqual(accessProvider, AccessProvider.Current);
                Assert.AreEqual(emvrProvider, Providers.Instance.ElevatedModificationVisibilityRuleProvider);

                // Currently this does not work, because the property below re-creates the security
                // db provider from the prototype, so it cannot be ref equal with the original.
                // Assert.AreEqual(securityDbProvider, SecurityHandler.SecurityContext.DataProvider);
                Assert.AreEqual(securityDbProvider, Providers.Instance.SecurityDataProvider);

                // Check a few trace categories that were switched ON above.
                Assert.IsTrue(SnTrace.Custom.Enabled);
                Assert.IsTrue(SnTrace.Test.Enabled);
                Assert.IsTrue(SnTrace.Web.Enabled);
                Assert.IsTrue(SnTrace.System.Enabled);
                Assert.IsFalse(SnTrace.TaskManagement.Enabled);
                Assert.IsFalse(SnTrace.Workflow.Enabled);
            }
        }
Example #21
0
        private static void RunSAQ(ProgramArguments arguments)
        {
            var entities    = SystemStartTests.CreateTestEntities();
            var groups      = SystemStartTests.CreateTestGroups();
            var memberships = Tools.CreateInMemoryMembershipTable(groups);
            var aces        = SystemStartTests.CreateTestAces();
            var storage     = new DatabaseStorage {
                Aces = aces, Memberships = memberships, Entities = entities, Messages = new List <Tuple <int, DateTime, byte[]> >()
            };

            StartTheSystem(new MemoryDataProvider(storage));

            started = DateTime.UtcNow;

            Enumerable.Range(1, arguments.Agents).Select(x => Task.Run(() => SAQExercise(x))).ToArray();
        }
Example #22
0
        public static void CheckCustomRank_MissingColumn(IDatabaseAccess db, DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var row = MakeRow("a", new object());

            // Try create table
            AssertCannotAddColumn(Record.Exception(delegate() {
                storage.Store("foo1", row);
            }));

            storage.Store("foo2", MakeRow("b", 1));

            // Try add column
            AssertCannotAddColumn(Record.Exception(delegate() {
                storage.Store("foo2", row);
            }));
        }
Example #23
0
        public static void CheckCustomRank_MissingColumn(IDatabaseAccess db, DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var row = MakeRow("a", new object());

            // Try create table
            AssertCannotAddColumn(Record.Exception(delegate() {
                storage.Store("foo1", row);
            }));

            storage.Store("foo2", MakeRow("b", 1));

            // Try add column
            AssertCannotAddColumn(Record.Exception(delegate() {
                storage.Store("foo2", row);
            }));
        }
Example #24
0
        public static void CheckSchemaReadingKeepsCache(IDatabaseAccess db, DatabaseStorage storage)
        {
            db.Exec("create table foo(bar int)");
            db.Exec("insert into foo(bar) values(1)");

            var queryCount = 0;

            db.QueryExecuting += cmd => queryCount++;

            db.Cell <int>(true, "Select * from foo");
            storage.GetSchema();

            var savedQueryCount = queryCount;

            db.Cell <int>(true, "Select * from foo");

            Assert.Equal(savedQueryCount, queryCount);
        }
        public void RepositoryStart_NullPopulator()
        {
            var dbProvider2 = new InMemoryDataProvider();

            Providers.Instance.DataProvider = dbProvider2;
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            var repoBuilder = new RepositoryBuilder()
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseDataProvider(dbProvider2)
                              .UseInitialData(GetInitialData())
                              .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider2))
                              .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                              .AddBlobProvider(new InMemoryBlobProvider())
                              .UseSecurityDataProvider(securityDbProvider)
                              .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                              .UseSearchEngine(searchEngine)
                              .UseAccessProvider(accessProvider)
                              .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            var originalIsOuterSearchEngineEnabled = Indexing.IsOuterSearchEngineEnabled;

            Indexing.IsOuterSearchEngineEnabled = false;
            try
            {
                using (Repository.Start(repoBuilder))
                {
                    Assert.IsFalse(SearchManager.IsOuterEngineEnabled);
                    Assert.AreEqual(typeof(InternalSearchEngine), SearchManager.SearchEngine.GetType());
                    var populator = SearchManager.GetIndexPopulator();
                    Assert.AreEqual(typeof(NullPopulator), populator.GetType());
                }
            }
            finally
            {
                Indexing.IsOuterSearchEngineEnabled = originalIsOuterSearchEngineEnabled;
            }
        }
        public void RepositoryStart_AuditEventWriter_Database()
        {
            var originalWriter = SnLog.AuditEventWriter;
            var auditWriter    = new DatabaseAuditEventWriter();

            var dbProvider         = new InMemoryDataProvider();
            var securityDbProvider = new MemoryDataProvider(DatabaseStorage.CreateEmpty());
            var searchEngine       = new InMemorySearchEngine(GetInitialIndex());
            var accessProvider     = new DesktopAccessProvider();
            var emvrProvider       = new ElevatedModificationVisibilityRule();

            try
            {
                // Clear the slot to ensure a real test.
                Providers.Instance.AuditEventWriter = null;

                var repoBuilder = new RepositoryBuilder()
                                  .UseAccessProvider(new DesktopAccessProvider())
                                  .UseDataProvider(dbProvider)
                                  .UseAuditEventWriter(auditWriter) // <-- The important line
                                  .UseInitialData(GetInitialData())
                                  .UseBlobMetaDataProvider(new InMemoryBlobStorageMetaDataProvider(dbProvider))
                                  .UseBlobProviderSelector(new InMemoryBlobProviderSelector())
                                  .AddBlobProvider(new InMemoryBlobProvider())
                                  .UseSecurityDataProvider(securityDbProvider)
                                  .UseSecurityMessageProvider(new DefaultMessageProvider(new MessageSenderManager()))
                                  .UseSearchEngine(searchEngine)
                                  .UseAccessProvider(accessProvider)
                                  .UseElevatedModificationVisibilityRuleProvider(emvrProvider)
                                  .StartIndexingEngine(false)
                                  .StartWorkflowEngine(false)
                                  .UseTraceCategories("Test", "Web", "System");

                using (Repository.Start(repoBuilder))
                {
                    Assert.AreSame(auditWriter, Providers.Instance.AuditEventWriter);
                    Assert.AreSame(auditWriter, SnLog.AuditEventWriter);
                }
            }
            finally
            {
                SnLog.AuditEventWriter = originalWriter;
            }
        }
Example #27
0
        public static void CheckDateTimeQueries(IDatabaseAccess db, DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var dateTime = SAMPLE_DATETIME;
            var date = SAMPLE_DATETIME.Date;

            storage.Store("foo", MakeRow("d", date));
            storage.Store("foo", MakeRow("d", dateTime));
            Assert.Equal(2, db.Cell<int>(false, "select count(*) from foo where d = {0} or d = {1}", date, dateTime));

            db.Exec("delete from foo");

            for(var i = -2; i <= 2; i++)
                storage.Store("foo", MakeRow("d", date.AddDays(i)));
            Assert.Equal(3, db.Cell<int>(false, "select count(*) from foo where d between {0} and {1}", date.AddDays(-1), date.AddDays(1)));

            Assert.Equal(date, db.Cell<DateTime>(false, "select d from foo where d = {0}", date));
        }
Example #28
0
        public void RepositoryStart_NodeObservers_DisableAll()
        {
            var repoBuilder = new RepositoryBuilder()
                              .UseDataProvider(new InMemoryDataProvider())
                              .UseSecurityDataProvider(new MemoryDataProvider(DatabaseStorage.CreateEmpty()))
                              .UseSearchEngine(new InMemorySearchEngine())
                              .UseAccessProvider(new DesktopAccessProvider())
                              .UseElevatedModificationVisibilityRuleProvider(new ElevatedModificationVisibilityRule())
                              .UseCacheProvider(new EmptyCache())
                              .DisableNodeObservers()
                              .StartIndexingEngine(false)
                              .StartWorkflowEngine(false)
                              .UseTraceCategories("Test", "Web", "System");

            using (Repository.Start(repoBuilder))
            {
                Assert.IsFalse(Providers.Instance.NodeObservers.Any());
            }
        }
Example #29
0
        public static void CheckCompoundKey(DatabaseStorage storage, KeyUtil keys)
        {
            storage.EnterFluidMode();

            keys.RegisterKey("foo", new[] { "k1", "k2" }, null);

            var row = MakeRow(
                "k1", "text",
                "k2", Guid.NewGuid(),
                "v", "hello"
            );

            var id = storage.Store("foo", row) as CompoundKey;
            Assert.Equal(row["k1"], id["k1"]);
            Assert.Equal(row["k2"], id["k2"]);

            row = storage.Load("foo", id);
            Assert.Equal("hello", row["v"]);
        }
Example #30
0
        public MainWindow()
        {
            InitializeComponent();

            //create but hide the extra windows so that their state is always persistent if opened
            //they can be toggled on by clicking their button and close will be overridden to hide and not delete
            _settingsWindow = new SettingsWindow();
            _toolsWindow    = new ToolsWindow();
            _playerWindow   = new PlayerWindow();
            _settingsWindow.Hide();
            _toolsWindow.Hide();
            _playerWindow.Hide();


            // ReSharper disable once InconsistentNaming
            bool validDB = false;

            try {
                validDB = DatabaseStorage.InitDatabase();
            }
            catch (Exception e) {
                Debug.Print(e.Message);
                Close();
            }

            var names = DatabaseStorage.GetAllShowNames();


            foreach (var name in names)
            {
                try {
                    var showCard = new ShowCard(name, this);
                    Wrapper.Children.Add(showCard);
                    showCard.Width      = 75;
                    showCard.Height     = 75;
                    showCard.Background = Brushes.Green;
                    showCard.Margin     = new Thickness(10, 10, 10, 10);
                }
                catch (Exception e) {
                    Debug.Print(e.Message);
                }
            }
        }
Example #31
0
        public static void CheckCompoundKey(DatabaseStorage storage, KeyUtil keys)
        {
            storage.EnterFluidMode();

            keys.RegisterKey("foo", new[] { "k1", "k2" }, null);

            var row = MakeRow(
                "k1", "text",
                "k2", Guid.NewGuid(),
                "v", "hello"
                );

            var id = storage.Store("foo", row) as CompoundKey;

            Assert.Equal(row["k1"], id["k1"]);
            Assert.Equal(row["k2"], id["k2"]);

            row = storage.Load("foo", id);
            Assert.Equal("hello", row["v"]);
        }
Example #32
0
        public void DrawerSetShow(string showname)
        {
            CurrentClickedShow = showname;


            BottomDrawer.Children.RemoveRange(0, BottomDrawer.Children.Count);

            var seasons = DatabaseStorage.GetSeasonsForShow(showname);

            SeasonSelector.Items.Clear();
            foreach (var season in seasons)
            {
                var tb = new TextBlock();
                tb.Text = $"Season {season.ToString()}";
                SeasonSelector.Items.Add(tb);
            }

            SeasonSelector.SelectedIndex = 0;
            SeasonSelector.Visibility    = Visibility.Visible;
        }
        public DatabaseBeanFinderTests()
        {
            _conn = SQLitePortability.CreateConnection();
            _conn.Open();

            IDatabaseDetails details = new SQLiteDetails();
            IDatabaseAccess  db      = new DatabaseAccess(_conn, details);
            IKeyAccess       keys    = new KeyUtil();
            IStorage         storage = new DatabaseStorage(details, db, keys);
            IBeanCrud        crud    = new BeanCrud(storage, db, keys);
            IBeanFinder      finder  = new DatabaseBeanFinder(details, db, crud);

            db.Exec("create table foo(x)");
            db.Exec("insert into foo(x) values(1)");
            db.Exec("insert into foo(x) values(2)");
            db.Exec("insert into foo(x) values(3)");

            _db     = db;
            _finder = finder;
        }
        public DatabaseBeanFinderTests()
        {
            _conn = SQLitePortability.CreateConnection();
            _conn.Open();

            IDatabaseDetails details = new SQLiteDetails();
            IDatabaseAccess db = new DatabaseAccess(_conn, details);
            IKeyAccess keys = new KeyUtil();
            IStorage storage = new DatabaseStorage(details, db, keys);
            IBeanCrud crud = new BeanCrud(storage, db, keys);
            IBeanFinder finder = new DatabaseBeanFinder(details, db, crud);

            db.Exec("create table foo(x)");
            db.Exec("insert into foo(x) values(1)");
            db.Exec("insert into foo(x) values(2)");
            db.Exec("insert into foo(x) values(3)");

            _db = db;
            _finder = finder;
        }
Example #35
0
        public static void CheckDateTimeQueries(IDatabaseAccess db, DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var dateTime = SAMPLE_DATETIME;
            var date     = SAMPLE_DATETIME.Date;

            storage.Store("foo", MakeRow("d", date));
            storage.Store("foo", MakeRow("d", dateTime));
            Assert.Equal(2, db.Cell <int>(false, "select count(*) from foo where d = {0} or d = {1}", date, dateTime));

            db.Exec("delete from foo");

            for (var i = -2; i <= 2; i++)
            {
                storage.Store("foo", MakeRow("d", date.AddDays(i)));
            }
            Assert.Equal(3, db.Cell <int>(false, "select count(*) from foo where d between {0} and {1}", date.AddDays(-1), date.AddDays(1)));

            Assert.Equal(date, db.Cell <DateTime>(false, "select d from foo where d = {0}", date));
        }
Example #36
0
 public RoundtripChecker(IDatabaseAccess db, DatabaseStorage storage)
 {
     _db = db;
     _storage = storage;
 }
Example #37
0
        public static void CheckSchemaReadingKeepsCache(IDatabaseAccess db, DatabaseStorage storage)
        {
            db.Exec("create table foo(bar int)");
            db.Exec("insert into foo(bar) values(1)");

            var queryCount = 0;
            db.QueryExecuting += cmd => queryCount++;

            db.Cell<int>(true, "Select * from foo");
            storage.GetSchema();

            var savedQueryCount = queryCount;
            db.Cell<int>(true, "Select * from foo");

            Assert.Equal(savedQueryCount, queryCount);
        }
Example #38
0
        public static void CheckStoringNull(DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var row = MakeRow("p", 1);
            var id = storage.Store("foo", row);

            row = storage.Load("foo", id);
            row["p"] = null;
            storage.Store("foo", row);

            row = storage.Load("foo", id);
            Assert.Null(row["p"]);
        }
Example #39
0
        public static void CheckLongToDouble(IDatabaseAccess db, DatabaseStorage storage)
        {
            storage.EnterFluidMode();

            var bigLong = Int64.MinValue + 12345;
            var longID = storage.Store("foo", MakeRow("p", bigLong));

            storage.Store("foo", MakeRow("p", Math.PI));
            Assert.Equal(bigLong, db.Cell<long>(false, "select p from foo where id = {0}", longID));
        }
Example #40
0
 public static void CheckGuidQuery(IDatabaseAccess db, DatabaseStorage storage)
 {
     storage.EnterFluidMode();
     storage.Store("foo", MakeRow("g", SAMPLE_GUID));
     Assert.Equal(SAMPLE_GUID, db.Cell<Guid>(false, "select g from foo where g = {0}", SAMPLE_GUID));
 }