示例#1
0
        protected override void SetupVariant(int option)
        {
            _objectCount = Native.c4_getObjectCount();
            Storage      = (option & 1) != 0 ? C4StorageEngine.ForestDB : C4StorageEngine.SQLite;
            Versioning   = (option & 2) != 0 ? C4DocumentVersioning.VersionVectors : C4DocumentVersioning.RevisionTrees;
            Native.c4_shutdown(null);

            var config = new C4DatabaseConfig();

            config.flags      = C4DatabaseFlags.Create;
            config.versioning = Versioning;

            if (_bundled)
            {
                config.flags |= C4DatabaseFlags.Bundled;
            }

            Console.WriteLine($"Opening {Storage} database using {Versioning}");

            C4Error err;

            config.storageEngine = Storage;
            Native.c4db_deleteAtPath(DatabasePath(), &config, null);
            Db = Native.c4db_open(DatabasePath(), &config, &err);
            ((long)Db).Should().NotBe(0, "because otherwise the database failed to open");
        }
示例#2
0
        protected override void SetupVariant(int option)
        {
            _objectCount = Native.c4_getObjectCount();
            Versioning   = C4DocumentVersioning.RevisionTrees;
            Native.c4_shutdown(null);

            var config = new C4DatabaseConfig();

            config.flags      = C4DatabaseFlags.Create | C4DatabaseFlags.SharedKeys;
            config.versioning = Versioning;

            var encryptedStr = (option & 1) == 1 ? "encrypted " : String.Empty;

            WriteLine($"Opening {encryptedStr}SQLite database using {Versioning}");

            C4Error err;

            config.storageEngine = C4StorageEngine.SQLite;
            if ((option & 1) == 1)
            {
                config.encryptionKey.algorithm = C4EncryptionAlgorithm.AES256;
                var i = 0;
                foreach (var b in Encoding.UTF8.GetBytes("this is not a random key at all."))
                {
                    config.encryptionKey.bytes[i++] = b;
                }
            }

            Native.c4db_deleteAtPath(DatabasePath(), null);
            Db = Native.c4db_open(DatabasePath(), &config, &err);
            ((long)Db).Should().NotBe(0, "because otherwise the database failed to open");
        }
 public static void Delete(string path, C4DatabaseConfig config)
 {
     LiteCoreBridge.Check(err =>
     {
         var localConfig = config;
         return(Native.c4db_deleteAtPath(path, &localConfig, err));
     });
 }
 public LiteCoreDatabase(string path, C4DatabaseConfig config)
 {
     _native = (C4Database *)LiteCoreBridge.Check(err =>
     {
         var localConfig = config;
         return(Native.c4db_open(path, &localConfig, err));
     });
 }
示例#5
0
        protected void ReopenDB()
        {
            var config = C4DatabaseConfig.Get(Native.c4db_getConfig(Db));

            LiteCoreBridge.Check(err => Native.c4db_close(Db, err));
            Native.c4db_free(Db);
            Db = (C4Database *)LiteCoreBridge.Check(err => {
                var localConfig = config;
                return(Native.c4db_open(DatabasePath(), &localConfig, err));
            });
        }
示例#6
0
        protected override void TeardownVariant(int option)
        {
            var config = C4DatabaseConfig.Get(Native.c4db_getConfig(Db));

            config.Dispose();
            LiteCoreBridge.Check(err => Native.c4db_delete(Db, err));
            Native.c4db_free(Db);
            Db = null;
            //if(CurrentException == null) {
            //    Native.c4_getObjectCount().Should().Be(_objectCount, "because otherwise an object was leaked");
            //}
        }
示例#7
0
        protected void ReopenDBReadOnly()
        {
            var config = C4DatabaseConfig.Get(Native.c4db_getConfig(Db));

            LiteCoreBridge.Check(err => Native.c4db_close(Db, err));
            Native.c4db_free(Db);
            config.flags = (config.flags & ~C4DatabaseFlags.Create) | C4DatabaseFlags.ReadOnly;
            Db           = (C4Database *)LiteCoreBridge.Check(err => {
                var localConfig = config;
                return(Native.c4db_open(DatabasePath(), &localConfig, err));
            });
        }
        public void TestOpenBundle()
        {
            RunTestVariants(() => {
                var config    = C4DatabaseConfig.Clone(Native.c4db_getConfig(Db));
                config.flags |= C4DatabaseFlags.Bundled;
                var tmp       = config;

                var bundlePath = Path.Combine(TestDir, "cbl_core_test_bundle") + "/";
                Native.c4db_deleteAtPath(bundlePath, &config, null);
                var bundle = (C4Database *)LiteCoreBridge.Check(err => {
                    var localConfig = tmp;
                    return(Native.c4db_open(bundlePath, &localConfig, err));
                });

                var path = Native.c4db_getPath(bundle);
                path.Should().Be(bundlePath, "because the database should store the correct path");
                LiteCoreBridge.Check(err => Native.c4db_close(bundle, err));
                Native.c4db_free(bundle);

                // Reopen without the 'create' flag:
                config.flags &= ~C4DatabaseFlags.Create;
                tmp           = config;
                bundle        = (C4Database *)LiteCoreBridge.Check(err => {
                    var localConfig = tmp;
                    return(Native.c4db_open(bundlePath, &localConfig, err));
                });
                LiteCoreBridge.Check(err => Native.c4db_close(bundle, err));
                Native.c4db_free(bundle);

                // Reopen with wrong storage type:
                Native.c4log_warnOnErrors(false);
                if (config.storageEngine == C4StorageEngine.SQLite)
                {
                    config.storageEngine = C4StorageEngine.ForestDB;
                }
                else
                {
                    config.storageEngine = C4StorageEngine.SQLite;
                }

                C4Error error;
                ((long)Native.c4db_open(bundlePath, &config, &error)).Should().Be(0,
                                                                                  "because the storage engine is invalid");

                ((long)Native.c4db_open(Path.Combine(TestDir, "no_such_bundle"), &config, &error)).Should().Be(0,
                                                                                                               "because the storage engine is invalid");
                Native.c4log_warnOnErrors(true);
                config.Dispose();
            });
        }
示例#9
0
        public void TestOpenBundle()
        {
            RunTestVariants(() => {
                var config    = C4DatabaseConfig.Clone(Native.c4db_getConfig(Db));
                config.flags |= C4DatabaseFlags.Bundled;
                var tmp       = config;

                var bundlePath = Path.Combine(TestDir, $"cbl_core_test_bundle{Path.DirectorySeparatorChar}");
                Native.c4db_deleteAtPath(bundlePath, &config, null);
                var bundle = (C4Database *)LiteCoreBridge.Check(err => {
                    var localConfig = tmp;
                    return(Native.c4db_open(bundlePath, &localConfig, err));
                });

                var path = Native.c4db_getPath(bundle);
                path.Should().Be(bundlePath, "because the database should store the correct path");
                LiteCoreBridge.Check(err => Native.c4db_close(bundle, err));
                Native.c4db_free(bundle);

                // Reopen without the 'create' flag:
                config.flags &= ~C4DatabaseFlags.Create;
                tmp           = config;
                bundle        = (C4Database *)LiteCoreBridge.Check(err => {
                    var localConfig = tmp;
                    return(Native.c4db_open(bundlePath, &localConfig, err));
                });
                LiteCoreBridge.Check(err => Native.c4db_close(bundle, err));
                Native.c4db_free(bundle);

                // Reopen with wrong storage type:
                NativePrivate.c4log_warnOnErrors(false);
                var engine           = config.storageEngine;
                config.storageEngine = "b0gus";
                ((long)Native.c4db_open(bundlePath, &config, null)).Should().Be(0, "because the storage engine is nonsense");
                config.storageEngine = engine;

                // Open nonexistent bundle
                ((long)Native.c4db_open($"no_such_bundle{Path.DirectorySeparatorChar}", &config, null)).Should().Be(0, "because the bundle does not exist");
                NativePrivate.c4log_warnOnErrors(true);

                config.Dispose();
            });
        }