Revision bdc4b0bb73ff91e7c3ef8874db85f2d01050b091 authored by Debo~ Dutta on 10 April 2018, 09:04:19 UTC, committed by Ce Gao on 10 April 2018, 09:04:19 UTC
* cleanup of README * Update README.md
1 parent ea48c08
interface_test.go
// This test assumes mysql listening on localhost:3306, which can be
// prepared by the following:
// docker run -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=vizier -p 3306:3306 mysql
package db
import (
"fmt"
"github.com/golang/protobuf/jsonpb"
"math/rand"
"os"
"testing"
api "github.com/kubeflow/hp-tuning/api"
_ "github.com/go-sql-driver/mysql"
"gopkg.in/DATA-DOG/go-sqlmock.v1"
)
var db_interface VizierDBInterface
var mock sqlmock.Sqlmock
func TestMain(m *testing.M) {
// db, err := sql.Open("mysql", "root:test123@tcp(localhost:3306)/vizier")
db, sm, err := sqlmock.New()
mock = sm
if err != nil {
fmt.Printf("error opening db: %v\n", err)
os.Exit(1)
}
//mock.ExpectBegin()
db_interface = NewWithSqlConn(db)
mock.ExpectExec("CREATE TABLE IF NOT EXISTS studies").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectExec("CREATE TABLE IF NOT EXISTS study_permissions").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectExec("CREATE TABLE IF NOT EXISTS trials").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectExec("CREATE TABLE IF NOT EXISTS trial_logs").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectExec("CREATE TABLE IF NOT EXISTS workers").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
db_interface.DB_Init()
os.Exit(m.Run())
}
func TestGetStudyConfig(t *testing.T) {
var in api.StudyConfig
in.ParameterConfigs = new(api.StudyConfig_ParameterConfigs)
//err := jsonpb.UnmarshalString("{}", &in)
err := jsonpb.UnmarshalString(`{"configs": [{"name": "-abc"}]}`, in.ParameterConfigs)
if err != nil {
t.Errorf("err %v", err)
}
mock.ExpectExec("INSERT INTO studies VALUES").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
id, err := db_interface.CreateStudy(&in)
if err != nil {
t.Errorf("CreateStudy error %v", err)
}
// mock.ExpectExec("SELECT * FROM studies WHERE id").WithArgs(id).WillReturnRows(sqlmock.NewRows())
mock.ExpectQuery("SELECT").WillReturnRows(
sqlmock.NewRows([]string{"id", "name", "owner", "optimization_type", "optimization_goal", "parameter_configs", "suggest_algo", "autostop_algo", "study_task_name", "suggestion_parameters", "tags", "objective_value_name", "metrics", "image", "command", "gpu", "scheduler", "mount", "pull_secret"}).
AddRow("abc", "test", "admin", 1, 0.99, "{}", "random", "test", "", "", "", "", "", "", "", 1, "", "", ""))
study, err := db_interface.GetStudyConfig(id)
if err != nil {
t.Errorf("GetStudyConfig failed: %v", err)
}
fmt.Printf("%v", study)
// TODO: check study data
}
func TestCreateStudyIdGeneration(t *testing.T) {
var in api.StudyConfig
in.ParameterConfigs = new(api.StudyConfig_ParameterConfigs)
var ids []string
for i := 0; i < 4; i++ {
rand.Seed(int64(i))
mock.ExpectExec("INSERT INTO studies VALUES").WithArgs().WillReturnResult(sqlmock.NewResult(1, 1))
id, err := db_interface.CreateStudy(&in)
if err != nil {
t.Errorf("CreateStudy error %v", err)
}
ids = append(ids, id)
t.Logf("id gen %d %s %v\n", i, id, err)
}
encountered := map[string]bool{}
for i := 0; i < len(ids); i++ {
if !encountered[ids[i]] {
encountered[ids[i]] = true
} else {
t.Fatalf("Study ID duplicated %v", ids)
}
}
for _, id := range ids {
mock.ExpectExec("DELETE").WillReturnResult(sqlmock.NewResult(1, 1))
err := db_interface.DeleteStudy(id)
if err != nil {
t.Errorf("DeleteStudy error %v", err)
}
}
}
Computing file changes ...