github.com/tommi2day/gomodules/dblib@v0.0.0-20230217211148-82cdbcf0a79d/db_test.go (about)

     1  package dblib
     2  
     3  import (
     4  	"database/sql"
     5  	"os"
     6  	"testing"
     7  
     8  	ora "github.com/sijms/go-ora/v2"
     9  
    10  	_ "github.com/glebarez/go-sqlite"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  var urlOptions = map[string]string{
    16  	// "CONNECTION TIMEOUT": "3",
    17  }
    18  
    19  func newTestfile(filename string) error {
    20  	var err error
    21  	var f *os.File
    22  	//nolint gosec
    23  	f, err = os.Create(filename)
    24  	if err != nil {
    25  		return err
    26  	}
    27  	err = f.Close()
    28  	return err
    29  }
    30  
    31  func TestDBConnect(t *testing.T) {
    32  	t.Run("Test DB Connect Memory", func(t *testing.T) {
    33  		db, err := DBConnect("sqlite", ":memory:", 5)
    34  		defer func(db *sql.DB) {
    35  			_ = db.Close()
    36  		}(db)
    37  		require.NoError(t, err, "DB Open sqlite memory failed")
    38  		assert.NotEmpty(t, db, "DB Handle missed")
    39  	})
    40  
    41  	t.Run("Test DB Connect noexisting oracle", func(t *testing.T) {
    42  		service := "xxx"
    43  		connect := ora.BuildJDBC("dummy", "dummy", service, urlOptions)
    44  		_, err := DBConnect("oracle", connect, 5)
    45  		assert.Error(t, err, "DB Open oracle should fail")
    46  	})
    47  
    48  	t.Run("Test DB Connect existing file", func(t *testing.T) {
    49  		filename := "test2.db"
    50  		err := newTestfile(filename)
    51  		if err != nil {
    52  			t.Fatalf("Cannot create sqlite file")
    53  		}
    54  		db, err := DBConnect("sqlite", filename, 5)
    55  		require.NoError(t, err, "DB Open sqlite %s failed")
    56  		assert.NotEmpty(t, db, "DB Handle missed")
    57  		e := db.Close()
    58  		if e == nil {
    59  			_ = os.Remove(filename)
    60  		}
    61  	})
    62  }
    63  
    64  func TestSelectOneStringValue(t *testing.T) {
    65  	var actual string
    66  	var err error
    67  	filename := "test3.db"
    68  	err = newTestfile(filename)
    69  	if err != nil {
    70  		t.Fatalf("Cannot create sqlite file")
    71  	}
    72  	db, err := DBConnect("sqlite", filename, 5)
    73  	defer func(db *sql.DB) {
    74  		e := db.Close()
    75  		if e == nil {
    76  			_ = os.Remove(filename)
    77  		}
    78  	}(db)
    79  	if err != nil {
    80  		t.Fatalf("DB Open sqlite %s failed", filename)
    81  	}
    82  	if db == nil {
    83  		t.Fatalf("DB Handle missed")
    84  	}
    85  
    86  	t.Run("Test Select Singlerow", func(t *testing.T) {
    87  		mysql := "select sqlite_version()"
    88  		actual, err = SelectOneStringValue(db, mysql)
    89  		assert.NoErrorf(t, err, "Querry returned error %s", err)
    90  		assert.NotEmpty(t, actual, "Select value empty")
    91  		t.Logf("Version %s", actual)
    92  	})
    93  	t.Run("Test wrong sql", func(t *testing.T) {
    94  		mysql := "seleccct sqlite_version()"
    95  		_, err = SelectOneStringValue(db, mysql)
    96  		assert.Error(t, err, "Query returned no error, but should")
    97  	})
    98  }