Browse Source

refactor beego tests (#2595)

* refactor beego tests

* add glide.lock

* code review fix

* add beego orm with mysql
Sergey Lanzman 8 years ago
parent
commit
6df2046409

+ 1 - 0
frameworks/Go/beego/.gitignore

@@ -1,2 +1,3 @@
 /src/github.com/
 /pkg/linux_amd64/
+vendor

+ 1 - 1
frameworks/Go/beego/README.md

@@ -8,7 +8,7 @@ This is the Beego portion of a [benchmarking test suite](../) comparing a variet
 
 ## Versions
 
-* [Go 1.1](http://golang.org/)
+* [Go 1.8](https://golang.org/)
 * [Beego](https://github.com/astaxie/beego/)
 
 ## Test URLs

+ 23 - 3
frameworks/Go/beego/benchmark_config.json

@@ -4,11 +4,31 @@
     "default": {
       "setup_file": "setup",
       "json_url": "/json",
-      "db_url": "/db",
       "plaintext_url": "/plaintext",
       "port": 8080,
       "approach": "Realistic",
-      "classification": "Micro",
+      "classification": "Fullstack",
+      "database": "none",
+      "framework": "None",
+      "language": "Go",
+      "flavor": "None",
+      "orm": "raw",
+      "platform": "None",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Beego",
+      "notes": "",
+      "versus": "go"
+    },
+    "orm-mysql": {
+      "setup_file": "setup-beego-orm-mysql",
+      "db_url": "/db",
+      "query_url": "/queries?queries=",
+      "update_url": "/update?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
       "database": "MySQL",
       "framework": "beego",
       "language": "Go",
@@ -18,7 +38,7 @@
       "webserver": "None",
       "os": "Linux",
       "database_os": "Linux",
-      "display_name": "beego",
+      "display_name": "Beego",
       "notes": "",
       "versus": "go"
     }

+ 12 - 0
frameworks/Go/beego/setup-beego-orm-mysql.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+sed -i 's|tcp(.*:3306)|tcp('"${DBHOST}"':3306)|g' src/hello-orm-mysql/models/init.go
+
+fw_depends mysql go
+
+curl https://glide.sh/get | sh
+glide -v
+
+cd src/hello-orm-mysql
+glide install
+go run main.go &

+ 2 - 1
frameworks/Go/beego/setup.bat

@@ -1,2 +1,3 @@
 set GOPATH=C:\FrameworkBenchmarks\beego
-go run src\hello\hello.go
+cd src\hello
+go run main.go

+ 6 - 6
frameworks/Go/beego/setup.sh

@@ -1,10 +1,10 @@
 #!/bin/bash
 
-sed -i 's|tcp(.*:3306)|tcp('"${DBHOST}"':3306)|g' src/hello/hello.go
+fw_depends go
 
-fw_depends mysql go
+curl https://glide.sh/get | sh
+glide -v
 
-go get github.com/astaxie/beego
-go get github.com/go-sql-driver/mysql
-
-go run src/hello/hello.go &
+cd src/hello
+glide install
+go run main.go &

+ 9 - 2
frameworks/Go/beego/source_code

@@ -1,2 +1,9 @@
-./beego/src/hello/
-./beego/src/hello/hello.go
+./beego/src/hello/main.go
+./beego/src/hello/controllers/db_controller.go
+./beego/src/hello/controllers/base_controller.go
+./beego/src/hello/controllers/queries_controller.go
+./beego/src/hello/controllers/json_controller.go
+./beego/src/hello/controllers/plaintext_controller.go
+./beego/src/hello/models/init.go
+./beego/src/hello/models/message.go
+./beego/src/hello/models/world.go

+ 27 - 0
frameworks/Go/beego/src/hello-orm-mysql/controllers/base_controller.go

@@ -0,0 +1,27 @@
+package controllers
+
+import "github.com/astaxie/beego"
+
+type Base struct {
+	beego.Controller
+}
+
+const Server = "Server"
+const Beego = "Beego"
+const queries = "queries"
+const json = "json"
+
+func (c *Base) Prepare() {
+	c.Ctx.Output.Header(Server, Beego)
+}
+
+func (c *Base) getQueriesParam() int {
+	n, err := c.GetInt(queries)
+	if err != nil || n < 1 {
+		return 1
+	}
+	if n > 500 {
+		return 500
+	}
+	return n
+}

+ 27 - 0
frameworks/Go/beego/src/hello-orm-mysql/controllers/db_controller.go

@@ -0,0 +1,27 @@
+package controllers
+
+import (
+	"log"
+	"math/rand"
+
+	"hello-orm-mysql/models"
+
+	"github.com/astaxie/beego/orm"
+)
+
+const worldRowCount = 10000
+
+type DBController struct {
+	Base
+}
+
+func (c *DBController) Get() {
+	o := orm.NewOrm()
+	w := models.World{Id: uint16(rand.Intn(worldRowCount) + 1)}
+	err := o.Read(&w)
+	if err != nil {
+		log.Fatalf("Error read world row: %s", err.Error())
+	}
+	c.Data[json] = &w
+	c.ServeJSON()
+}

+ 31 - 0
frameworks/Go/beego/src/hello-orm-mysql/controllers/db_update_controller.go

@@ -0,0 +1,31 @@
+package controllers
+
+import (
+	"log"
+	"math/rand"
+
+	"hello-orm-mysql/models"
+
+	"github.com/astaxie/beego/orm"
+)
+
+type DBUpdateController struct {
+	Base
+}
+
+func (c *DBUpdateController) Get() {
+	n := c.getQueriesParam()
+	o := orm.NewOrm()
+	world := make([]models.World, n)
+	for i := 0; i < n; i++ {
+		if err := o.Raw(models.WorldSelect, rand.Intn(models.WorldRowCount)+1).QueryRow(&world[i].Id, &world[i].RandomNumber); err != nil {
+			log.Fatalf("Error scanning world row: %v", err)
+		}
+		world[i].RandomNumber = uint16(rand.Intn(models.WorldRowCount) + 1)
+		if _, err := o.Raw(models.WorldUpdate, world[i].RandomNumber, world[i].Id).Exec(); err != nil {
+			log.Fatalf("Error updating world row: %v", err)
+		}
+	}
+	c.Data[json] = &world
+	c.ServeJSON()
+}

+ 13 - 0
frameworks/Go/beego/src/hello-orm-mysql/controllers/queries_controller.go

@@ -0,0 +1,13 @@
+package controllers
+
+import "hello-orm-mysql/models"
+
+type QueriesController struct {
+	Base
+}
+
+func (c *QueriesController) Get() {
+	n := c.getQueriesParam()
+	c.Data[json] = models.GetQueriesWorld(n)
+	c.ServeJSON()
+}

+ 8 - 0
frameworks/Go/beego/src/hello-orm-mysql/glide.yaml

@@ -0,0 +1,8 @@
+package: beego/src/hello-orm-mysql
+import:
+- package: github.com/astaxie/beego
+  version: ^1.8.0
+  subpackages:
+  - orm
+- package: github.com/go-sql-driver/mysql
+  version: ^1.3.0

+ 15 - 0
frameworks/Go/beego/src/hello-orm-mysql/main.go

@@ -0,0 +1,15 @@
+package main
+
+import (
+	"hello-orm-mysql/controllers"
+
+	"github.com/astaxie/beego"
+)
+
+func main() {
+	beego.BConfig.RunMode = "prod"
+	beego.Router("/db", &controllers.DBController{})
+	beego.Router("/update", &controllers.DBUpdateController{})
+	beego.Router("/queries", &controllers.QueriesController{})
+	beego.Run()
+}

+ 18 - 0
frameworks/Go/beego/src/hello-orm-mysql/models/init.go

@@ -0,0 +1,18 @@
+package models
+
+import (
+	"github.com/astaxie/beego/orm"
+	_ "github.com/go-sql-driver/mysql"
+)
+
+const (
+	// Database
+	connectionString   = "benchmarkdbuser:benchmarkdbpass@tcp(TFB-database:3306)/hello_world"
+	macIdleConnection  = 30
+	maxConnectionCount = 256
+)
+
+func init() {
+	orm.RegisterModel(new(World))
+	orm.RegisterDataBase("default", "mysql", connectionString, macIdleConnection, maxConnectionCount)
+}

+ 31 - 0
frameworks/Go/beego/src/hello-orm-mysql/models/world.go

@@ -0,0 +1,31 @@
+package models
+
+import (
+	"log"
+	"math/rand"
+
+	"github.com/astaxie/beego/orm"
+)
+
+type World struct {
+	Id           uint16 `orm:"pk" json:"id"`
+	RandomNumber uint16 `orm:"column(randomNumber)" json:"randomNumber"`
+}
+
+const WorldSelect = "SELECT id, randomNumber FROM World WHERE id = ?"
+const WorldUpdate = "UPDATE World SET randomNumber = ? WHERE id = ?"
+const WorldRowCount = 10000
+
+func GetQueriesWorld(queries int) *[]World {
+	o := orm.NewOrm()
+	ww := make([]World, queries)
+	for i := 0; i < queries; i++ {
+		err := o.Raw(WorldSelect, rand.Intn(WorldRowCount)+1).QueryRow(&ww[i])
+		if err != nil {
+			log.Fatalf("Error scanning world row: %v", err)
+		}
+		ww[i].RandomNumber = uint16(rand.Intn(WorldRowCount) + 1)
+		_, err = o.Raw(WorldUpdate, ww[i].RandomNumber, ww[i].Id).Exec()
+	}
+	return &ww
+}

+ 15 - 0
frameworks/Go/beego/src/hello/controllers/base_controller.go

@@ -0,0 +1,15 @@
+package controllers
+
+import "github.com/astaxie/beego"
+
+type Base struct {
+	beego.Controller
+}
+
+const Server = "Server"
+const Beego = "Beego"
+const json = "json"
+
+func (c *Base) Prepare() {
+	c.Ctx.Output.Header(Server, Beego)
+}

+ 12 - 0
frameworks/Go/beego/src/hello/controllers/json_controller.go

@@ -0,0 +1,12 @@
+package controllers
+
+import "hello/models"
+
+type JsonController struct {
+	Base
+}
+
+func (c *JsonController) Get() {
+	c.Data[json] = &models.Message{Message: helloWorldString}
+	c.ServeJSON()
+}

+ 16 - 0
frameworks/Go/beego/src/hello/controllers/plaintext_controller.go

@@ -0,0 +1,16 @@
+package controllers
+
+type PlaintextController struct {
+	Base
+}
+
+const helloWorldString = "Hello, World!"
+
+var (
+	helloWorldBytes = []byte(helloWorldString)
+)
+
+func (c *PlaintextController) Get() {
+	c.Ctx.Output.Header("Content-Type", "text/plain")
+	c.Ctx.Output.Body(helloWorldBytes)
+}

+ 8 - 0
frameworks/Go/beego/src/hello/glide.yaml

@@ -0,0 +1,8 @@
+package: beego/src/hello
+import:
+- package: github.com/astaxie/beego
+  version: ^1.8.0
+  subpackages:
+  - orm
+- package: github.com/go-sql-driver/mysql
+  version: ^1.3.0

+ 0 - 80
frameworks/Go/beego/src/hello/hello.go

@@ -1,80 +0,0 @@
-package main
-
-import (
-	"log"
-	"math/rand"
-
-	"github.com/astaxie/beego"
-	"github.com/astaxie/beego/orm"
-	_ "github.com/go-sql-driver/mysql"
-)
-
-const (
-	// Database
-	connectionString   = "benchmarkdbuser:benchmarkdbpass@tcp(localhost:3306)/hello_world?collation=utf8mb4_bin&interpolateParams=true"
-	worldRowCount      = 10000
-	macIdleConnection  = 30
-	maxConnectionCount = 256
-
-	helloWorldString = "Hello, World!"
-)
-
-var (
-	helloWorldBytes = []byte(helloWorldString)
-)
-
-type MessageStruct struct {
-	Message string `json:"message"`
-}
-
-type World struct {
-	Id           uint16 `orm:"pk" json:"id"`
-	RandomNumber uint16 `orm:"column(randomNumber)" json:"randomNumber"`
-}
-
-type JsonController struct {
-	beego.Controller
-}
-
-func (this *JsonController) Get() {
-	m := MessageStruct{"Hello, World!"}
-	this.Data["json"] = &m
-	this.ServeJSON()
-}
-
-type PlaintextController struct {
-	beego.Controller
-}
-
-func (this *PlaintextController) Get() {
-	this.Ctx.Output.Header("Content-Type", "text/plain")
-	this.Ctx.Output.Body(helloWorldBytes)
-}
-
-type DBController struct {
-	beego.Controller
-}
-
-func (this *DBController) Get() {
-	o := orm.NewOrm()
-	w := World{Id: uint16(rand.Intn(worldRowCount) + 1)}
-	err := o.Read(&w)
-	if err != nil {
-		log.Fatalf("Error read world row: %s", err.Error())
-	}
-	this.Data["json"] = &w
-	this.ServeJSON()
-}
-
-func main() {
-	beego.BConfig.RunMode = "prod"
-	beego.Router("/json", &JsonController{})
-	beego.Router("/db", &DBController{})
-	beego.Router("/plaintext", &PlaintextController{})
-	beego.Run()
-}
-
-func init() {
-	orm.RegisterModel(new(World))
-	orm.RegisterDataBase("default", "mysql", connectionString, macIdleConnection, maxConnectionCount)
-}

+ 14 - 0
frameworks/Go/beego/src/hello/main.go

@@ -0,0 +1,14 @@
+package main
+
+import (
+	"hello/controllers"
+
+	"github.com/astaxie/beego"
+)
+
+func main() {
+	beego.BConfig.RunMode = "prod"
+	beego.Router("/json", &controllers.JsonController{})
+	beego.Router("/plaintext", &controllers.PlaintextController{})
+	beego.Run()
+}

+ 5 - 0
frameworks/Go/beego/src/hello/models/message.go

@@ -0,0 +1,5 @@
+package models
+
+type Message struct {
+	Message string `json:"message"`
+}