예제 #1
0
파일: gorai.go 프로젝트: go51/gorai
func rootFunc(w http.ResponseWriter, r *http.Request) {

	g := Load()

	l := log551.New(&g.config.Framework.SystemLog)
	l.Open()
	defer l.Close()

	cookie := cookie551.New(w, r)

	sid := g.sid(cookie)
	l.Debugf("%s SID: %s", sid[:10], sid)
	session := memcache551.New(&g.config.Framework.Session.Server, sid)

	route := g.router.FindRouteByPathMatch(r.Method, r.URL.Path)
	response551.UrlFunction = g.router.Url

	var data interface{} = nil
	if route != nil {
		mysql := mysql551.New(&g.config.Framework.Database)
		mysql.Open()
		defer mysql.Close()

		l.Debugf("%s --[ Routing ]--", sid[:10])
		l.Debugf("%s Path: %s", sid[:10], r.URL.Path)
		l.Debugf("%s Neme: %s", sid[:10], route.Name())

		c := container551.New()
		c.SetSID(sid)
		c.SetResponseWriter(w)
		c.SetRequest(r)
		c.SetLogger(l)
		c.SetCookie(cookie)
		c.SetDb(mysql)
		c.SetSession(session)
		c.SetModel(g.modelManager)
		c.SetAuth(g.auth)
		c.SetUrlFunc(g.router.Url)

		baseUrl := "https://" + g.config.Framework.WebServerSSL.Host
		if g.config.Framework.WebServerSSL.Port != "443" {
			baseUrl = baseUrl + ":" + g.config.Framework.WebServerSSL.Port
		}
		c.SetBaseURL(baseUrl)
		response551.BaseUrl = baseUrl

		action := route.Action()
		data = action(c)
		response551.Response(w, r, data, route.PackageName(), route.Name(), c.User(), g.config.Application)
	} else {
		l.Errorf("%s --[ Route not found ]--", sid[:10])
		l.Errorf("%s UA:     %s", sid[:10], r.UserAgent())
		l.Errorf("%s Method: %s", sid[:10], r.Method)
		l.Errorf("%s Path:   %s", sid[:10], r.URL.Path)
		l.Errorf("%s --[/Route not found ]--", sid[:10])
		data = response551.Error(404, "Route not found.")
		response551.Response(w, r, data, "", "", nil, g.config.Application)
	}

}
예제 #2
0
func TestMain(m *testing.M) {

	dbConfig := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "repository551",
	}
	db = mysql551.New(dbConfig)
	db.Open()
	defer db.Close()

	// Truncate
	sql := "TRUNCATE TABLE sample"
	_, _ = db.Exec(sql)
	sql = "TRUNCATE TABLE sample_delete"
	_, _ = db.Exec(sql)

	// Insert
	sql = "INSERT INTO sample (`group_id`, `name`, `description`) VALUES (?, ?, ?)"
	_, _ = db.Exec(sql, 2, "pubapp.biz_1", "domain_1")
	_, _ = db.Exec(sql, 1, "pubapp.biz_2", "domain_2")
	_, _ = db.Exec(sql, 2, "pubapp.biz_3", "domain_3")
	_, _ = db.Exec(sql, 2, "pubapp.biz_4", "domain_4")
	_, _ = db.Exec(sql, 3, "pubapp.biz_5", "domain_5")

	mm = model551.Load()
	mm.Add(NewSampleModel, NewSampleModelPointer)

	code := m.Run()

	os.Exit(code)

}
예제 #3
0
func initialize() {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)
	m.Open()
	defer m.Close()

	// truncate
	sql := "truncate table sample_table"
	_, _ = m.Exec(sql)
	sql = "truncate table sample_table_cud"
	_, _ = m.Exec(sql)
	sql = "truncate table sample_table_tran"
	_, _ = m.Exec(sql)

	// Insert
	sql = "insert into sample_table (name, description) values (?, ?)"
	_, _ = m.Exec(sql, "pubapp.biz_1", "domain_1")
	_, _ = m.Exec(sql, "pubapp.biz_2", "domain_2")
	_, _ = m.Exec(sql, "pubapp.biz_3", "domain_3")
	_, _ = m.Exec(sql, "pubapp.biz_4", "domain_4")
	_, _ = m.Exec(sql, "pubapp.biz_5", "domain_5")

}
예제 #4
0
func TestQueryOne(t *testing.T) {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)

	m.Open()
	defer m.Close()

	sqlAll := "select id, name, description from sample_table where id = ?"
	rows := m.Query(sqlAll, 3)
	defer rows.Close()

	if rows.Next() {
		s := sample{}
		err := rows.Scan(&s.id, &s.name, &s.description)
		if err != nil {
			t.Errorf("クエリ実行に失敗しました。")
		}
		if s.id != 3 {
			t.Errorf("クエリ実行に失敗しました。")
		}
		if s.name != "pubapp.biz_3" {
			t.Errorf("クエリ実行に失敗しました。")
		}
		if s.description != "domain_3" {
			t.Errorf("クエリ実行に失敗しました。")
		}
	}

}
예제 #5
0
func TestQueryAll(t *testing.T) {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)

	m.Open()
	defer m.Close()

	sqlAll := "select id, name, description from sample_table"
	rows := m.Query(sqlAll)
	defer rows.Close()

	i := 0
	for rows.Next() {
		s := sample{}
		err := rows.Scan(&s.id, &s.name, &s.description)
		if err != nil {
			t.Errorf("クエリ実行が失敗しました。\nResult: %d件", i)
		}
		i++
	}

	if i != 5 {
		t.Errorf("クエリ実行が失敗しました。\nResult: %d件", i)
	}

}
예제 #6
0
파일: gorai.go 프로젝트: go51/gorai
func consoleHandler() {

	g := Load()

	l := log551.New(&g.config.Framework.CommandLog)
	l.Open()
	defer l.Close()

	sid := secure551.Hash()

	// Routing
	name := os.Args[1]
	l.Debugf("%s [ Command ] %s", sid[:10], name)
	route := g.router.FindRouteByName(router551.COMMAND.String(), name)
	if route == nil {
		l.Errorf("%s %s", sid[:10], "Action not found...")
		return
	}

	// Options
	optionArgs := os.Args[2:]
	if len(optionArgs)%2 == 1 {
		l.Errorf("%s %s", sid[:10], "Missing options.")
	}
	options := make(map[string]string, len(optionArgs)/2)
	for i := 0; i < len(optionArgs); i += 2 {
		options[optionArgs[i][1:]] = optionArgs[i+1]
	}

	mysql := mysql551.New(&g.config.Framework.Database)
	mysql.Open()
	defer mysql.Close()

	session := memcache551.New(&g.config.Framework.Session.Server, sid)

	c := container551.New()
	c.SetSID(sid)
	c.SetResponseWriter(nil)
	c.SetRequest(nil)
	c.SetLogger(l)
	c.SetCookie(nil)
	c.SetDb(mysql)
	c.SetSession(session)
	c.SetModel(g.modelManager)
	c.SetCommandOptions(options)
	if g.config.Framework.WebServerSSL.Port == "443" {
		c.SetBaseURL("https://" + g.config.Framework.WebServerSSL.Host)
	} else {
		c.SetBaseURL("https://" + g.config.Framework.WebServerSSL.Host + ":" + g.config.Framework.WebServerSSL.Port)
	}

	action := route.Action()
	action(c)

}
예제 #7
0
func TestNew(t *testing.T) {
	config := &mysql551.Config{
		Host:     "localhost",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m1 := mysql551.New(config)
	m2 := mysql551.New(config)

	if m1 == nil {
		t.Errorf("インスタンスの生成に失敗しました。%#v\n", m1)
	}
	if m2 == nil {
		t.Errorf("インスタンスの生成に失敗しました。%#v\n", m2)
	}
	if &m1 == &m2 {
		t.Errorf("インスタンスの生成に失敗しました。\n [%p] != [%p]", &m1, &m2)
	}
}
예제 #8
0
func TestExecUpdate(t *testing.T) {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)

	m.Open()
	defer m.Close()

	update := "update sample_table_cud set name = ?, description = ? where id = ?"
	affected, id := m.Exec(update, "pubapp.biz_1", "test_1", 1)

	if affected != 1 {
		t.Errorf("クエリ実行が失敗しました。\nAffected: %d", affected)
	}
	if id != 0 {
		t.Errorf("クエリ実行が失敗しました。\nId: %d", id)
	}

	update = "update sample_table_cud set name = ?, description = ? where id = ?"
	affected, id = m.Exec(update, "pubapp.biz_2", "test_2", 2)

	if affected != 0 {
		t.Errorf("クエリ実行が失敗しました。\nAffected: %d", affected)
	}
	if id != 0 {
		t.Errorf("クエリ実行が失敗しました。\nId: %d", id)
	}

	sql := "select id, name, description from sample_table_cud where id = ?"
	rows := m.Query(sql, 1)

	if rows.Next() {
		s := sample{}
		err := rows.Scan(&s.id, &s.name, &s.description)
		if err != nil {
			t.Errorf("クエリ実行に失敗しました。")
		}
		if s.id != 1 {
			t.Errorf("クエリ実行に失敗しました。")
		}
		if s.name != "pubapp.biz_1" {
			t.Errorf("クエリ実行に失敗しました。")
		}
		if s.description != "test_1" {
			t.Errorf("クエリ実行に失敗しました。")
		}
	}
}
예제 #9
0
func BenchmarkNew(b *testing.B) {
	config := &mysql551.Config{
		Host:     "localhost",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		_ = mysql551.New(config)
	}
}
예제 #10
0
func BenchmarkOpenClose(b *testing.B) {
	b.SkipNow()
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)

	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		m.Open()
		m.Close()
	}
}
예제 #11
0
func TestOpenClose(t *testing.T) {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)

	m.Open()
	if !m.IsOpen() {
		t.Errorf("データベースとの接続に失敗しました。\nResult: %v\n", m.IsOpen())
	}
	m.Close()
	if m.IsOpen() {
		t.Errorf("データベースとの切断に失敗しました。\nResult: %v\n", m.IsOpen())
	}

}
예제 #12
0
func TestExecInsert(t *testing.T) {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)

	m.Open()
	defer m.Close()

	insert := "insert into sample_table_cud (name, description) values (?, ?)"
	affected, id := m.Exec(insert, "pubapp.biz", "test")

	if affected != 1 {
		t.Errorf("クエリ実行が失敗しました。\nAffected: %d", affected)
	}
	if id != 1 {
		t.Errorf("クエリ実行が失敗しました。\nId: %d", id)
	}
}
예제 #13
0
func TestTransaction(t *testing.T) {
	config := &mysql551.Config{
		Host:     "tcp(localhost:3306)",
		User:     "******",
		Password: "",
		Database: "mysql551_test",
	}

	m := mysql551.New(config)
	m2 := mysql551.New(config)

	m.Open()
	defer m.Close()
	m2.Open()
	defer m2.Close()

	m.Begin()

	if !m.IsTransaction() {
		t.Errorf("トランザクションを実施しているはず。")
	}
	if m2.IsTransaction() {
		t.Errorf("トランザクションを実施していないはず。")
	}

	insert := "insert into sample_table_tran (name, description) values (?, ?)"
	_, _ = m.Exec(insert, "pubapp.biz", "domain")

	var cnt int64 = 0

	sql := "select count(*) as cnt from sample_table_tran"
	rows := m.Query(sql)
	if rows.Next() {
		rows.Scan(&cnt)
	}
	rows.Close()

	if cnt != 1 {
		t.Errorf("トランザクション中のクエリ実行に失敗しました。")
	}

	rows = m2.Query(sql)
	if rows.Next() {
		rows.Scan(&cnt)
	}
	rows.Close()

	if cnt != 0 {
		t.Errorf("トランザクション中のクエリ実行に失敗しました。\nCount: %d", cnt)
	}

	m.Commit()

	rows = m2.Query(sql)
	if rows.Next() {
		rows.Scan(&cnt)
	}
	rows.Close()

	if cnt != 1 {
		t.Errorf("トランザクション中のクエリ実行に失敗しました。\nCount: %d", cnt)
	}

	m.Begin()

	delete := "delete from sample_table_tran"
	_, _ = m.Exec(delete)

	rows = m.Query(sql)
	if rows.Next() {
		rows.Scan(&cnt)
	}
	rows.Close()

	if cnt != 0 {
		t.Errorf("トランザクション中のクエリ実行に失敗しました。")
	}

	m.Rollback()

	rows = m.Query(sql)
	if rows.Next() {
		rows.Scan(&cnt)
	}
	rows.Close()

	if cnt != 1 {
		t.Errorf("トランザクション中のクエリ実行に失敗しました。")
	}

}