@@ -345,3 +345,79 @@ func Test_CanStartAndStopTwice(t *testing.T) {
345345 shutdownDBAndFail (t , err , database )
346346 }
347347}
348+
349+ func Test_ReuseData (t * testing.T ) {
350+ tempDir , err := ioutil .TempDir ("" , "embedded_postgres_test" )
351+ if err != nil {
352+ panic (err )
353+ }
354+
355+ defer func () {
356+ if err := os .RemoveAll (tempDir ); err != nil {
357+ panic (err )
358+ }
359+ }()
360+
361+ database := NewDatabase (DefaultConfig ().DataPath (tempDir ))
362+
363+ if err := database .Start (); err != nil {
364+ shutdownDBAndFail (t , err , database )
365+ }
366+
367+ db , err := sql .Open ("postgres" , fmt .Sprintf ("host=localhost port=5432 user=postgres password=postgres dbname=postgres sslmode=disable" ))
368+ if err != nil {
369+ shutdownDBAndFail (t , err , database )
370+ }
371+
372+ if _ , err = db .Exec ("CREATE TABLE test(id serial, value text, PRIMARY KEY(id))" ); err != nil {
373+ shutdownDBAndFail (t , err , database )
374+ }
375+
376+ if _ , err = db .Exec ("INSERT INTO test (value) VALUES ('foobar')" ); err != nil {
377+ shutdownDBAndFail (t , err , database )
378+ }
379+
380+ if err := db .Close (); err != nil {
381+ shutdownDBAndFail (t , err , database )
382+ }
383+
384+ if err := database .Stop (); err != nil {
385+ shutdownDBAndFail (t , err , database )
386+ }
387+
388+ database = NewDatabase (DefaultConfig ().DataPath (tempDir ))
389+
390+ if err := database .Start (); err != nil {
391+ shutdownDBAndFail (t , err , database )
392+ }
393+
394+ db , err = sql .Open ("postgres" , fmt .Sprintf ("host=localhost port=5432 user=postgres password=postgres dbname=postgres sslmode=disable" ))
395+ if err != nil {
396+ shutdownDBAndFail (t , err , database )
397+ }
398+
399+ if rows , err := db .Query ("SELECT * FROM test" ); err != nil {
400+ shutdownDBAndFail (t , err , database )
401+ } else if ! rows .Next () {
402+ shutdownDBAndFail (t , errors .New ("no row from db" ), database )
403+ } else {
404+ var (
405+ id int64
406+ value string
407+ )
408+ if err := rows .Scan (& id , & value ); err != nil {
409+ shutdownDBAndFail (t , err , database )
410+ }
411+ if value != "foobar" {
412+ shutdownDBAndFail (t , errors .New ("wrong value from db" ), database )
413+ }
414+ }
415+
416+ if err := db .Close (); err != nil {
417+ shutdownDBAndFail (t , err , database )
418+ }
419+
420+ if err := database .Stop (); err != nil {
421+ shutdownDBAndFail (t , err , database )
422+ }
423+ }
0 commit comments