Skip to content

Commit

Permalink
chore: add new endtoend test
Browse files Browse the repository at this point in the history
  • Loading branch information
earayu committed Nov 26, 2024
1 parent 52f0f49 commit edc0d08
Show file tree
Hide file tree
Showing 7 changed files with 207 additions and 0 deletions.
36 changes: 36 additions & 0 deletions endtoend/framework/connection_utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package framework

import (
"database/sql"
"fmt"
"github.com/go-sql-driver/mysql"
"time"
)

func newMysqlConfig(host string, port int, user string, passwd string, dbName string) *mysql.Config {
return &mysql.Config{
Net: "tcp",
Addr: fmt.Sprintf("%s:%d", host, port),
User: user,
Passwd: passwd,
ParseTime: true,
Loc: time.Local,
AllowNativePasswords: true,
DBName: dbName,
}
}

func newMysqlConnectionPool(host string, port int, user string, passwd string, dbName string) (*sql.DB, error) {
c := newMysqlConfig(host, port, user, passwd, dbName)
db, err := sql.Open("mysql", c.FormatDSN())
if err != nil {
return nil, err
}

if err := db.Ping(); err != nil {
db.Close()
return nil, err
}

return db, nil
}
72 changes: 72 additions & 0 deletions endtoend/framework/single_node_cluster.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package framework

import (
"database/sql"
"flag"
)

var (
mysqlHost = "127.0.0.1"
mysqlPort = 3306
mysqlUser = "root"
mysqlPasswd = "passwd"

wescaleHost = "127.0.0.1"
wescalePort = 15306
wescaleUser = "root"
wescalePasswd = "passwd"
)

func init() {
RegisterFlagsForSingleNodeCluster()
}

func RegisterFlagsForSingleNodeCluster() {
flag.StringVar(&mysqlHost, "mysqlHost", mysqlHost, "Host of the MySQL server")
flag.IntVar(&mysqlPort, "mysqlPort", mysqlPort, "Port of the MySQL server")
flag.StringVar(&mysqlUser, "mysqlUser", mysqlUser, "User for the MySQL server")
flag.StringVar(&mysqlPasswd, "mysqlPasswd", mysqlPasswd, "Password for the MySQL server")

flag.StringVar(&wescaleHost, "wescaleHost", wescaleHost, "Host of the WeScale server")
flag.IntVar(&wescalePort, "wescalePort", wescalePort, "Port of the WeScale server")
flag.StringVar(&wescaleUser, "wescaleUser", wescaleUser, "User for the WeScale server")
flag.StringVar(&wescalePasswd, "wescalePasswd", wescalePasswd, "Password for the WeScale server")
}

type SingleNodeCluster struct {
MysqlDb *sql.DB
WescaleDb *sql.DB
}

func SetUpSingleNodeCluster() (*SingleNodeCluster, error) {
mysqlDb, err := newMysqlConnectionPool(mysqlHost, mysqlPort, mysqlUser, mysqlPasswd, "")
if err != nil {
return nil, err
}

wescaleDb, err := newMysqlConnectionPool(wescaleHost, wescalePort, wescaleUser, wescalePasswd, "")
if err != nil {
return nil, err
}

return &SingleNodeCluster{
MysqlDb: mysqlDb,
WescaleDb: wescaleDb,
}, nil
}

func (c *SingleNodeCluster) TearDownSingleNodeCluster() error {
if c.MysqlDb != nil {
err := c.MysqlDb.Close()
if err != nil {
return err
}
}
if c.WescaleDb != nil {
err := c.WescaleDb.Close()
if err != nil {
return err
}
}
return nil
}
21 changes: 21 additions & 0 deletions endtoend/framework/sql_utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package framework

import (
"database/sql"
"fmt"
)

func CreateDatabaseIfNotExists(db *sql.DB, dbName string) error {
_, err := db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", dbName))
return err
}

func DropDatabaseIfExists(db *sql.DB, dbName string) error {
_, err := db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS `%s`", dbName))
return err
}

func ExecuteSqlScript(db *sql.DB, sqlScript string) error {
_, err := db.Exec(sqlScript)
return err
}
1 change: 1 addition & 0 deletions endtoend/wasm/cleanup.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
drop database if exists wasm_e2e_test;
64 changes: 64 additions & 0 deletions endtoend/wasm/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package wasm

import (
_ "embed"
"log"
"os"
"testing"
"vitess.io/vitess/endtoend/framework"
)

//go:embed setup.sql
var setupSql string

//go:embed cleanup.sql
var cleanupSql string

var cluster *framework.SingleNodeCluster

func setup() error {
var err error
cluster, err = framework.SetUpSingleNodeCluster()
if err != nil {
return err
}

err = framework.ExecuteSqlScript(cluster.WescaleDb, setupSql)
if err != nil {
cluster.TearDownSingleNodeCluster()
return err
}

return nil
}

func cleanup() error {
if err := framework.ExecuteSqlScript(cluster.WescaleDb, cleanupSql); err != nil {
return err
}
if err := cluster.TearDownSingleNodeCluster(); err != nil {
return err
}
return nil
}

func TestMain(m *testing.M) {
// Setup the test environment
if err := setup(); err != nil {
log.Printf("Setup failed: %v", err)
os.Exit(1)
}

// Run the tests
code := m.Run()

// Cleanup the test environment
if err := cleanup(); err != nil {
log.Printf("Cleanup failed: %v", err)
if code == 0 {
os.Exit(1)
}
}

os.Exit(code)
}
2 changes: 2 additions & 0 deletions endtoend/wasm/setup.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
create database if not exists wasm_e2e_test;

11 changes: 11 additions & 0 deletions endtoend/wasm/wasm_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package wasm

import (
"github.com/stretchr/testify/assert"
"testing"
)

func TestCreateWasmFilter(t *testing.T) {
assert.NoError(t, cluster.MysqlDb.Ping())
assert.NoError(t, cluster.WescaleDb.Ping())
}

0 comments on commit edc0d08

Please sign in to comment.