示例#1
0
func (sqliteDB) RunTest(t *testing.T, fn func(params)) {
	tempDir, err := ioutil.TempDir("", "")
	if err != nil {
		t.Fatal(err)
	}
	defer os.RemoveAll(tempDir)

	gosqlproxy.RegisterDSNTranslator("sqlite3", func(url *url.URL) string {
		return url.Path
	})
	// db, err := sql.Open("sqlite3", filepath.Join(tempDir, "foo.db"))
	db, err := sql.Open("gosqlproxy", "sqlite3://"+filepath.Join(tempDir, "foo.db"))
	if err != nil {
		t.Fatalf("foo.db open fail: %v", err)
	}
	fn(params{sqlite, t, db})
}
示例#2
0
func (m *goMysqlDB) RunTest(t *testing.T, fn func(params)) {
	if !m.Running() {
		t.Logf("skipping test; no MySQL running on localhost:3306")
		return
	}
	user := os.Getenv("GOSQLTEST_MYSQL_USER")
	if user == "" {
		user = "******"
	}
	pass, ok := getenvOk("GOSQLTEST_MYSQL_PASS")
	if !ok {
		pass = "******"
	}
	dbName := "gosqltest"

	gosqlproxy.RegisterDSNTranslator("mysql", func(url *url.URL) string {
		password, _ := url.User.Password()
		return fmt.Sprintf("%v:%v@%v", url.User.Username(), password, url.RequestURI())
	})

	// db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@/%s", user, pass, dbName))
	db, err := sql.Open("gosqlproxy", fmt.Sprintf("mysql://%s:%s@localhost/%s;params://localhost/ddd?batchsize=50&asyncwrite=true", user, pass, dbName))
	if err != nil {
		t.Fatalf("error connecting: %v", err)
	}

	params := params{goMysql, t, db}

	// Drop all tables in the test database.
	rows, err := db.Query("SHOW TABLES")
	if err != nil {
		t.Fatalf("failed to enumerate tables: %v", err)
	}
	for rows.Next() {
		var table string
		if rows.Scan(&table) == nil &&
			strings.HasPrefix(strings.ToLower(table), strings.ToLower(TablePrefix)) {
			params.mustExec("DROP TABLE " + table)
		}
	}

	fn(params)
}
示例#3
0
func (o *oracleDB) RunTest(t *testing.T, fn func(params)) {
	if !o.Running() {
		t.Logf("skipping test; no Oracle running on localhost:1521")
		return
	}

	gosqlproxy.RegisterDSNTranslator("gosqlproxy", func(*url.URL) string {
		return os.Getenv("GOSQLTEST_ORACLE") // !nashtsai! HACK pure override here
	})

	db, err := sql.Open("gosqlproxy", "goracle:localhost/"+os.Getenv("GOSQLTEST_ORACLE"))
	// db, err := sql.Open("goracle", os.Getenv("GOSQLTEST_ORACLE"))
	if err != nil {
		t.Fatalf("error connecting: %v", err)
	}
	defer db.Close()

	params := params{oracle, t, db}

	// Drop all tables in the test database.
	rows, err := db.Query(`SELECT table_name FROM user_tables
		WHERE UPPER(table_name) LIKE UPPER('` + TablePrefix + `%')`)
	if err != nil {
		t.Fatalf("failed to enumerate tables: %v", err)
	}
	var table sql.NullString
	for rows.Next() {
		err = rows.Scan(&table)
		// t.Logf("Next => table=%+v err=%s", table, err)
		if err != nil {
			t.Fatalf("error reading table name: %s", err)
		} else if !table.Valid {
			t.Fatalf("error reading table name: null value!")
		} else {
			params.mustExec("DROP TABLE " + table.String)
		}
	}

	fn(params)
}
示例#4
0
func (p *pqDB) RunTest(t *testing.T, fn func(params)) {
	if !p.Running() {
		fmt.Printf("skipping test; no Postgres running on localhost:5432\n")
		return
	}
	user := os.Getenv("GOSQLTEST_PQ_USER")
	if user == "" {
		user = os.Getenv("USER")
	}

	gosqlproxy.RegisterDSNTranslator("postgres", func(url *url.URL) string {
		password, _ := url.User.Password()
		return fmt.Sprintf("user=%s password=%s dbname=%s %s", url.User.Username(), password, strings.TrimPrefix(url.Path, "/"), url.RawQuery)
	})

	dbName := "gosqltest"
	db, err := sql.Open("gosqlproxy", fmt.Sprintf("postgres://%s@localhost/%s?sslmode=disable", user, dbName))
	// db, err := sql.Open("postgres", fmt.Sprintf("user=%s password=foo dbname=%s sslmode=disable", user, dbName))
	if err != nil {
		t.Fatalf("error connecting: %v", err)
	}

	params := params{pq, t, db}

	// Drop all tables in the test database.
	rows, err := db.Query("SELECT table_name FROM information_schema.tables WHERE table_name LIKE '" +
		TablePrefix + "%' AND table_schema = 'public'")
	if err != nil {
		t.Fatalf("failed to enumerate tables: %v", err)
	}
	for rows.Next() {
		var table string
		if rows.Scan(&table) == nil {
			params.mustExec("DROP TABLE " + table)
		}
	}

	fn(params)
}