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"); }
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)); }); }
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)); }); }
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"); //} }
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(); }); }
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(); }); }