diff --git a/db/db_test.go b/db/db_test.go index 5b4f9933..27254ac8 100644 --- a/db/db_test.go +++ b/db/db_test.go @@ -12,6 +12,7 @@ import ( "github.com/rqlite/rqlite/command" "github.com/rqlite/rqlite/command/encoding" + "github.com/rqlite/rqlite/db/testdata" "github.com/rqlite/rqlite/testdata/chinook" ) @@ -1398,6 +1399,47 @@ func Test_DumpMemory(t *testing.T) { } } +// Test_1GiBInMemory tests that in-memory databases larger than 1GiB, +// but smaller than 2GiB, can be created without issue. +func Test_1GiBInMemory(t *testing.T) { + t.Parallel() + db := mustCreateInMemoryDatabase() + defer db.Close() + + _, err := db.ExecuteStringStmt("CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, txt TEXT)") + if err != nil { + t.Fatalf("failed to create table: %s", err.Error()) + } + + stmt := fmt.Sprintf(`INSERT INTO foo(txt) VALUES("%s")`, text.Lorum) + for i := 0; i < 1715017; i++ { + r, err := db.ExecuteStringStmt(stmt) + if err != nil { + t.Fatalf("failed to Execute statement %s", err.Error()) + } + if len(r) != 1 { + t.Fatalf("unexpected length for Execute results: %d", len(r)) + } + if r[0].GetError() != "" { + t.Fatalf("failed to insert record: %s", r[0].GetError()) + } + } + + r, err := db.ExecuteStringStmt(stmt) + if err != nil { + t.Fatalf("failed to insert record %s", err.Error()) + } + fmt.Println(r) + + sz, err := db.Size() + if err != nil { + t.Fatalf("failed to get size: %s", err.Error()) + } + if sz <= 1073741824 { + t.Fatalf("failed to create a database greater than 1 GiB in size: %d", sz) + } +} + // Test_ParallelOperationsInMemory runs multiple accesses concurrently, ensuring // that correct results are returned in every goroutine. It's not 100% that this // test would bring out a bug, but it's almost 100%. diff --git a/db/testdata/text.go b/db/testdata/text.go new file mode 100644 index 00000000..7aad30da --- /dev/null +++ b/db/testdata/text.go @@ -0,0 +1,3 @@ +package text + +const Lorum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam ultricies turpis nisi, quis egestas enim scelerisque sit amet. Maecenas id massa tempus, pellentesque metus sit amet, faucibus ex. Fusce velit lacus, eleifend sit amet semper vitae, varius nec odio. Vestibulum dignissim massa sem, quis elementum nibh sodales ac. Mauris eget pretium diam. Praesent non diam mauris. Suspendisse finibus non purus non condimentum. In hac habitasse platea dictumst. Quisque vitae nibh justo. Aliquam tempus eget diam at commodo. Aenean nec sem leo. Cras bibendum, quam eu elementum laoreet, turpis orci bibendum arcu, id euismod justo dolor a augue"