github.com/andrewrech/ih-abstract@v0.0.0-20210322142951-2fec1c8d0f38/connect_test.go (about) 1 package main 2 3 import ( 4 "database/sql/driver" 5 "fmt" 6 "log" 7 "os" 8 "sync/atomic" 9 "testing" 10 11 "github.com/DATA-DOG/go-sqlmock" 12 "github.com/google/go-cmp/cmp" 13 ) 14 15 func TestDBLive(t *testing.T) { 16 var config string 17 var present bool 18 19 if config, present = os.LookupEnv("IH_ABSTRACT_TEST_CONFIG"); !present { 20 t.Skip("IH_ABSTRACT_TEST_CONFIG is unset, skipping connection test") 21 } 22 23 db, err := connect(config) 24 if err != nil { 25 log.Fatalln(err) 26 } 27 28 defer db.Close() 29 30 r := DB(config, db) 31 32 var counter int64 33 for range r.out { 34 counter++ 35 } 36 37 t.Run("Read 5 records from live database", func(t *testing.T) { 38 if counter != 5 { 39 t.Fatalf("failed to read 5 records from live Immune Health SQL database") 40 } 41 }) 42 43 <-r.done 44 } 45 46 func TestDBMock(t *testing.T) { 47 db, mock, err := sqlmock.New() 48 if err != nil { 49 fmt.Println("failed to open sqlmock database:", err) 50 } 51 defer db.Close() 52 53 in := helperTestReader(TestFile) 54 55 h := helperCorrectHeader() 56 57 rows := sqlmock.NewRows(h) 58 59 entry := make([]driver.Value, len(h)) 60 61 for l := range in { 62 for i := range l { 63 entry[i] = driver.Value(l[i]) 64 } 65 66 rows.AddRow(entry...) 67 } 68 69 // run SQL test 70 query := "SELECT" 71 mock.ExpectQuery(query).WillReturnRows(rows) 72 73 r := DB("ih-abstract.yml", db) 74 75 var counter int64 76 77 for range r.out { 78 atomic.AddInt64(&counter, 1) 79 } 80 81 <-r.done 82 83 t.Run("Read from mock SQL", func(t *testing.T) { 84 diff := cmp.Diff(int64(12), counter) 85 if diff != "" { 86 t.Fatalf(diff) 87 } 88 }) 89 }