diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd3441c0..9af933de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,6 @@
# developing
+- Error codes definition of cache module. [4493](https://github.com/beego/beego/pull/4493)
+- Remove generateCommentRoute http hook. Using `bee generate routers` commands instead.[4486](https://github.com/beego/beego/pull/4486) [bee PR 762](https://github.com/beego/bee/pull/762)
- Fix: /abc.html/aaa match /abc/aaa. [4459](https://github.com/beego/beego/pull/4459)
- ORM mock. [4407](https://github.com/beego/beego/pull/4407)
- Add sonar check and ignore test. [4432](https://github.com/beego/beego/pull/4432) [4433](https://github.com/beego/beego/pull/4433)
@@ -25,3 +27,5 @@
## Fix Sonar
- [4473](https://github.com/beego/beego/pull/4473)
+- [4474](https://github.com/beego/beego/pull/4474)
+- [4479](https://github.com/beego/beego/pull/4479)
\ No newline at end of file
diff --git a/README.md b/README.md
index 66abc883..8ec7ecfc 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,8 @@ Beego is compos of four parts:
3. Client: including ORM module, httplib module, cache module;
4. Server: including web module. We will support gRPC in the future;
+**Please use RELEASE version, or master branch which contains the latest bug fix**
+
## Quick Start
[Officail website](http://beego.me)
diff --git a/adapter/cache/cache_test.go b/adapter/cache/cache_test.go
index 382a3743..261e1e5e 100644
--- a/adapter/cache/cache_test.go
+++ b/adapter/cache/cache_test.go
@@ -19,6 +19,8 @@ import (
"sync"
"testing"
"time"
+
+ "github.com/stretchr/testify/assert"
)
const (
@@ -53,147 +55,95 @@ func TestCacheIncr(t *testing.T) {
func TestCache(t *testing.T) {
bm, err := NewCache("memory", `{"interval":20}`)
- if err != nil {
- t.Error(initError)
- }
- timeoutDuration := 10 * time.Second
- if err = bm.Put("astaxie", 1, timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
- if v := bm.Get("astaxie"); v.(int) != 1 {
- t.Error(getError)
- }
+ assert.Nil(t, err)
- time.Sleep(30 * time.Second)
+ timeoutDuration := 5 * time.Second
+ err = bm.Put("astaxie", 1, timeoutDuration)
+ assert.Nil(t, err)
- if bm.IsExist("astaxie") {
- t.Error(checkError)
- }
+ assert.True(t, bm.IsExist("astaxie"))
- if err = bm.Put("astaxie", 1, timeoutDuration); err != nil {
- t.Error(setError, err)
- }
+ assert.Equal(t, 1, bm.Get("astaxie"))
- if err = bm.Incr("astaxie"); err != nil {
- t.Error("Incr Error", err)
- }
+ time.Sleep(10 * time.Second)
- if v := bm.Get("astaxie"); v.(int) != 2 {
- t.Error(getError)
- }
+ assert.False(t, bm.IsExist("astaxie"))
- if err = bm.Decr("astaxie"); err != nil {
- t.Error("Decr Error", err)
- }
+ err = bm.Put("astaxie", 1, timeoutDuration)
+ assert.Nil(t, err)
- if v := bm.Get("astaxie"); v.(int) != 1 {
- t.Error(getError)
- }
- bm.Delete("astaxie")
- if bm.IsExist("astaxie") {
- t.Error("delete err")
- }
+ err = bm.Incr("astaxie")
+ assert.Nil(t, err)
- // test GetMulti
- if err = bm.Put("astaxie", "author", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
- if v := bm.Get("astaxie"); v.(string) != "author" {
- t.Error(getError)
- }
+ assert.Equal(t, 2, bm.Get("astaxie"))
- if err = bm.Put("astaxie1", "author1", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie1") {
- t.Error(checkError)
- }
+ assert.Nil(t, bm.Decr("astaxie"))
+
+ assert.Equal(t, 1, bm.Get("astaxie"))
+
+ assert.Nil(t, bm.Delete("astaxie"))
+
+ assert.False(t, bm.IsExist("astaxie"))
+
+ assert.Nil(t, bm.Put("astaxie", "author", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie"))
+
+ assert.Equal(t, "author", bm.Get("astaxie"))
+
+ assert.Nil(t, bm.Put("astaxie1", "author1", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie1"))
vv := bm.GetMulti([]string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error(getMultiError)
- }
- if vv[0].(string) != "author" {
- t.Error(getMultiError)
- }
- if vv[1].(string) != "author1" {
- t.Error(getMultiError)
- }
+
+ assert.Equal(t, 2, len(vv))
+
+
+ assert.Equal(t, "author", vv[0])
+
+ assert.Equal(t, "author1", vv[1])
}
func TestFileCache(t *testing.T) {
bm, err := NewCache("file", `{"CachePath":"cache","FileSuffix":".bin","DirectoryLevel":"2","EmbedExpiry":"0"}`)
- if err != nil {
- t.Error(initError)
- }
- timeoutDuration := 10 * time.Second
- if err = bm.Put("astaxie", 1, timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
- if v := bm.Get("astaxie"); v.(int) != 1 {
- t.Error(getError)
- }
+ assert.Nil(t, err)
+ timeoutDuration := 5 * time.Second
- if err = bm.Incr("astaxie"); err != nil {
- t.Error("Incr Error", err)
- }
+ assert.Nil(t, bm.Put("astaxie", 1, timeoutDuration))
- if v := bm.Get("astaxie"); v.(int) != 2 {
- t.Error(getError)
- }
+ assert.True(t, bm.IsExist("astaxie"))
- if err = bm.Decr("astaxie"); err != nil {
- t.Error("Decr Error", err)
- }
+ assert.Equal(t, 1, bm.Get("astaxie"))
- if v := bm.Get("astaxie"); v.(int) != 1 {
- t.Error(getError)
- }
- bm.Delete("astaxie")
- if bm.IsExist("astaxie") {
- t.Error("delete err")
- }
+ assert.Nil(t, bm.Incr("astaxie"))
- // test string
- if err = bm.Put("astaxie", "author", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
- if v := bm.Get("astaxie"); v.(string) != "author" {
- t.Error(getError)
- }
+ assert.Equal(t, 2, bm.Get("astaxie"))
- // test GetMulti
- if err = bm.Put("astaxie1", "author1", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie1") {
- t.Error(checkError)
- }
+ assert.Nil(t, bm.Decr("astaxie"))
+
+ assert.Equal(t, 1, bm.Get("astaxie"))
+ assert.Nil(t, bm.Delete("astaxie"))
+
+ assert.False(t, bm.IsExist("astaxie"))
+
+ assert.Nil(t, bm.Put("astaxie", "author", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie"))
+
+ assert.Equal(t, "author", bm.Get("astaxie"))
+
+ assert.Nil(t, bm.Put("astaxie1", "author1", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie1"))
vv := bm.GetMulti([]string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error(getMultiError)
- }
- if vv[0].(string) != "author" {
- t.Error(getMultiError)
- }
- if vv[1].(string) != "author1" {
- t.Error(getMultiError)
- }
- os.RemoveAll("cache")
+ assert.Equal(t, 2, len(vv))
+
+ assert.Equal(t, "author", vv[0])
+ assert.Equal(t, "author1", vv[1])
+ assert.Nil(t, os.RemoveAll("cache"))
}
diff --git a/adapter/cache/memcache/memcache_test.go b/adapter/cache/memcache/memcache_test.go
index ae0c6df7..cbef74f6 100644
--- a/adapter/cache/memcache/memcache_test.go
+++ b/adapter/cache/memcache/memcache_test.go
@@ -21,6 +21,8 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
+
"github.com/beego/beego/v2/adapter/cache"
)
@@ -40,83 +42,52 @@ func TestMemcacheCache(t *testing.T) {
}
bm, err := cache.NewCache("memcache", fmt.Sprintf(`{"conn": "%s"}`, addr))
- if err != nil {
- t.Error(initError)
- }
- timeoutDuration := 10 * time.Second
- if err = bm.Put("astaxie", "1", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
+ assert.Nil(t, err)
+ timeoutDuration := 5 * time.Second
+
+ assert.Nil(t, bm.Put("astaxie", "1", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie"))
time.Sleep(11 * time.Second)
- if bm.IsExist("astaxie") {
- t.Error(checkError)
- }
- if err = bm.Put("astaxie", "1", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
+ assert.False(t, bm.IsExist("astaxie"))
- if v, err := strconv.Atoi(string(bm.Get("astaxie").([]byte))); err != nil || v != 1 {
- t.Error(getError)
- }
+ assert.Nil(t, bm.Put("astaxie", "1", timeoutDuration))
+ v, err := strconv.Atoi(string(bm.Get("astaxie").([]byte)))
+ assert.Nil(t, err)
+ assert.Equal(t, 1, v)
- if err = bm.Incr("astaxie"); err != nil {
- t.Error("Incr Error", err)
- }
+ assert.Nil(t, bm.Incr("astaxie"))
- if v, err := strconv.Atoi(string(bm.Get("astaxie").([]byte))); err != nil || v != 2 {
- t.Error(getError)
- }
+ v, err = strconv.Atoi(string(bm.Get("astaxie").([]byte)))
+ assert.Nil(t, err)
+ assert.Equal(t, 2, v)
- if err = bm.Decr("astaxie"); err != nil {
- t.Error("Decr Error", err)
- }
+ assert.Nil(t, bm.Decr("astaxie"))
- if v, err := strconv.Atoi(string(bm.Get("astaxie").([]byte))); err != nil || v != 1 {
- t.Error(getError)
- }
- bm.Delete("astaxie")
- if bm.IsExist("astaxie") {
- t.Error("delete err")
- }
+ v, err = strconv.Atoi(string(bm.Get("astaxie").([]byte)))
+ assert.Nil(t, err)
+ assert.Equal(t, 1, v)
- // test string
- if err = bm.Put("astaxie", "author", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
+ assert.Nil(t, bm.Delete("astaxie"))
- if v := bm.Get("astaxie").([]byte); string(v) != "author" {
- t.Error(getError)
- }
+ assert.False(t, bm.IsExist("astaxie"))
- // test GetMulti
- if err = bm.Put("astaxie1", "author1", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie1") {
- t.Error(checkError)
- }
+ assert.Nil(t, bm.Put("astaxie", "author", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie"))
+
+ assert.Equal(t, []byte("author"), bm.Get("astaxie"))
+
+ assert.Nil(t, bm.Put("astaxie1", "author1", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie1"))
vv := bm.GetMulti([]string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error(getMultiError)
- }
- if string(vv[0].([]byte)) != "author" && string(vv[0].([]byte)) != "author1" {
- t.Error(getMultiError)
- }
- if string(vv[1].([]byte)) != "author1" && string(vv[1].([]byte)) != "author" {
- t.Error(getMultiError)
- }
+ assert.Equal(t, 2, len(vv))
+ assert.Equal(t, []byte("author"), vv[0])
+ assert.Equal(t, []byte("author1"), vv[1])
- // test clear all
- if err = bm.ClearAll(); err != nil {
- t.Error("clear all err")
- }
+ assert.Nil(t, bm.ClearAll())
}
diff --git a/adapter/cache/redis/redis_test.go b/adapter/cache/redis/redis_test.go
index 781489be..3f0ddf6e 100644
--- a/adapter/cache/redis/redis_test.go
+++ b/adapter/cache/redis/redis_test.go
@@ -21,6 +21,7 @@ import (
"time"
"github.com/gomodule/redigo/redis"
+ "github.com/stretchr/testify/assert"
"github.com/beego/beego/v2/adapter/cache"
)
@@ -40,88 +41,69 @@ func TestRedisCache(t *testing.T) {
}
bm, err := cache.NewCache("redis", fmt.Sprintf(`{"conn": "%s"}`, redisAddr))
- if err != nil {
- t.Error(initError)
- }
- timeoutDuration := 10 * time.Second
- if err = bm.Put("astaxie", 1, timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
+ assert.Nil(t, err)
+ timeoutDuration := 5 * time.Second
- time.Sleep(11 * time.Second)
+ assert.Nil(t, bm.Put("astaxie", 1, timeoutDuration))
- if bm.IsExist("astaxie") {
- t.Error(checkError)
- }
- if err = bm.Put("astaxie", 1, timeoutDuration); err != nil {
- t.Error(setError, err)
- }
+ assert.True(t, bm.IsExist("astaxie"))
- if v, _ := redis.Int(bm.Get("astaxie"), err); v != 1 {
- t.Error(getError)
- }
+ time.Sleep(7 * time.Second)
- if err = bm.Incr("astaxie"); err != nil {
- t.Error("Incr Error", err)
- }
+ assert.False(t, bm.IsExist("astaxie"))
- if v, _ := redis.Int(bm.Get("astaxie"), err); v != 2 {
- t.Error(getError)
- }
+ assert.Nil(t, bm.Put("astaxie", 1, timeoutDuration))
- if err = bm.Decr("astaxie"); err != nil {
- t.Error("Decr Error", err)
- }
+ v, err := redis.Int(bm.Get("astaxie"), err)
+ assert.Nil(t, err)
+ assert.Equal(t, 1, v)
- if v, _ := redis.Int(bm.Get("astaxie"), err); v != 1 {
- t.Error(getError)
- }
- bm.Delete("astaxie")
- if bm.IsExist("astaxie") {
- t.Error("delete err")
- }
+ assert.Nil(t, bm.Incr("astaxie"))
- // test string
- if err = bm.Put("astaxie", "author", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie") {
- t.Error(checkError)
- }
+ v, err = redis.Int(bm.Get("astaxie"), err)
+ assert.Nil(t, err)
+ assert.Equal(t, 2, v)
- if v, _ := redis.String(bm.Get("astaxie"), err); v != "author" {
- t.Error(getError)
- }
+ assert.Nil(t, bm.Decr("astaxie"))
- // test GetMulti
- if err = bm.Put("astaxie1", "author1", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !bm.IsExist("astaxie1") {
- t.Error(checkError)
- }
+ v, err = redis.Int(bm.Get("astaxie"), err)
+ assert.Nil(t, err)
+ assert.Equal(t, 1, v)
+
+ assert.Nil(t, bm.Delete("astaxie"))
+
+ assert.False(t, bm.IsExist("astaxie"))
+
+ assert.Nil(t, bm.Put("astaxie", "author", timeoutDuration))
+ assert.True(t, bm.IsExist("astaxie"))
+
+ vs, err := redis.String(bm.Get("astaxie"), err)
+ assert.Nil(t, err)
+ assert.Equal(t, "author", vs)
+
+ assert.Nil(t, bm.Put("astaxie1", "author1", timeoutDuration))
+
+ assert.True(t, bm.IsExist("astaxie1"))
vv := bm.GetMulti([]string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error(getMultiError)
- }
- if v, _ := redis.String(vv[0], nil); v != "author" {
- t.Error(getMultiError)
- }
- if v, _ := redis.String(vv[1], nil); v != "author1" {
- t.Error(getMultiError)
- }
+ assert.Equal(t, 2, len(vv))
+
+ vs, err = redis.String(vv[0], nil)
+
+ assert.Nil(t, err)
+ assert.Equal(t, "author", vs)
+
+ vs, err = redis.String(vv[1], nil)
+
+ assert.Nil(t, err)
+ assert.Equal(t, "author1", vs)
+
+ assert.Nil(t, bm.ClearAll())
// test clear all
- if err = bm.ClearAll(); err != nil {
- t.Error("clear all err")
- }
}
-func TestCache_Scan(t *testing.T) {
+func TestCacheScan(t *testing.T) {
timeoutDuration := 10 * time.Second
// init
bm, err := cache.NewCache("redis", `{"conn": "127.0.0.1:6379"}`)
diff --git a/adapter/cache/ssdb/ssdb_test.go b/adapter/cache/ssdb/ssdb_test.go
index f2f72f81..d61d0a05 100644
--- a/adapter/cache/ssdb/ssdb_test.go
+++ b/adapter/cache/ssdb/ssdb_test.go
@@ -7,6 +7,8 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
+
"github.com/beego/beego/v2/adapter/cache"
)
@@ -25,95 +27,59 @@ func TestSsdbcacheCache(t *testing.T) {
}
ssdb, err := cache.NewCache("ssdb", fmt.Sprintf(`{"conn": "%s"}`, ssdbAddr))
- if err != nil {
- t.Error(initError)
- }
+ assert.Nil(t, err)
+
+ assert.False(t, ssdb.IsExist("ssdb"))
// test put and exist
- if ssdb.IsExist("ssdb") {
- t.Error(checkError)
- }
- timeoutDuration := 10 * time.Second
+ timeoutDuration := 3 * time.Second
// timeoutDuration := -10*time.Second if timeoutDuration is negtive,it means permanent
- if err = ssdb.Put("ssdb", "ssdb", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if !ssdb.IsExist("ssdb") {
- t.Error(checkError)
- }
+ assert.Nil(t, ssdb.Put("ssdb", "ssdb", timeoutDuration))
+ assert.True(t, ssdb.IsExist("ssdb"))
- // Get test done
- if err = ssdb.Put("ssdb", "ssdb", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
+ assert.Nil(t, ssdb.Put("ssdb", "ssdb", timeoutDuration))
- if v := ssdb.Get("ssdb"); v != "ssdb" {
- t.Error("get Error")
- }
+ assert.Equal(t, "ssdb", ssdb.Get("ssdb"))
// inc/dec test done
- if err = ssdb.Put("ssdb", "2", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if err = ssdb.Incr("ssdb"); err != nil {
- t.Error("incr Error", err)
- }
+ assert.Nil(t, ssdb.Put("ssdb", "2", timeoutDuration))
- if v, err := strconv.Atoi(ssdb.Get("ssdb").(string)); err != nil || v != 3 {
- t.Error(getError)
- }
+ assert.Nil(t, ssdb.Incr("ssdb"))
- if err = ssdb.Decr("ssdb"); err != nil {
- t.Error("decr error")
- }
+ v, err := strconv.Atoi(ssdb.Get("ssdb").(string))
+ assert.Nil(t, err)
+ assert.Equal(t, 3, v)
+
+ assert.Nil(t, ssdb.Decr("ssdb"))
+
+ assert.Nil(t, ssdb.Put("ssdb", "3", timeoutDuration))
// test del
- if err = ssdb.Put("ssdb", "3", timeoutDuration); err != nil {
- t.Error(setError, err)
- }
- if v, err := strconv.Atoi(ssdb.Get("ssdb").(string)); err != nil || v != 3 {
- t.Error(getError)
- }
- if err := ssdb.Delete("ssdb"); err == nil {
- if ssdb.IsExist("ssdb") {
- t.Error("delete err")
- }
- }
+ v, err = strconv.Atoi(ssdb.Get("ssdb").(string))
+ assert.Nil(t, err)
+ assert.Equal(t, 3, v)
+
+ assert.Nil(t, ssdb.Delete("ssdb"))
+ assert.False(t, ssdb.IsExist("ssdb"))
// test string
- if err = ssdb.Put("ssdb", "ssdb", -10*time.Second); err != nil {
- t.Error(setError, err)
- }
- if !ssdb.IsExist("ssdb") {
- t.Error(checkError)
- }
- if v := ssdb.Get("ssdb").(string); v != "ssdb" {
- t.Error(getError)
- }
+ assert.Nil(t, ssdb.Put("ssdb", "ssdb", -10*time.Second))
+
+ assert.True(t, ssdb.IsExist("ssdb"))
+ assert.Equal(t, "ssdb", ssdb.Get("ssdb"))
// test GetMulti done
- if err = ssdb.Put("ssdb1", "ssdb1", -10*time.Second); err != nil {
- t.Error(setError, err)
- }
- if !ssdb.IsExist("ssdb1") {
- t.Error(checkError)
- }
- vv := ssdb.GetMulti([]string{"ssdb", "ssdb1"})
- if len(vv) != 2 {
- t.Error(getMultiError)
- }
- if vv[0].(string) != "ssdb" {
- t.Error(getMultiError)
- }
- if vv[1].(string) != "ssdb1" {
- t.Error(getMultiError)
- }
+ assert.Nil(t, ssdb.Put("ssdb1", "ssdb1", -10*time.Second))
+ assert.True(t, ssdb.IsExist("ssdb1") )
+ vv := ssdb.GetMulti([]string{"ssdb", "ssdb1"})
+ assert.Equal(t, 2, len(vv))
+
+ assert.Equal(t, "ssdb", vv[0])
+ assert.Equal(t, "ssdb1", vv[1])
+
+ assert.Nil(t, ssdb.ClearAll())
+ assert.False(t, ssdb.IsExist("ssdb"))
+ assert.False(t, ssdb.IsExist("ssdb1"))
// test clear all done
- if err = ssdb.ClearAll(); err != nil {
- t.Error("clear all err")
- }
- if ssdb.IsExist("ssdb") || ssdb.IsExist("ssdb1") {
- t.Error(checkError)
- }
}
diff --git a/adapter/config/json_test.go b/adapter/config/json_test.go
index b3c75dc1..f0076f2a 100644
--- a/adapter/config/json_test.go
+++ b/adapter/config/json_test.go
@@ -18,6 +18,8 @@ import (
"fmt"
"os"
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestJsonStartsWithArray(t *testing.T) {
@@ -169,56 +171,39 @@ func TestJson(t *testing.T) {
default:
value, err = jsonconf.DIY(k)
}
- if err != nil {
- t.Fatalf("get key %q value fatal,%v err %s", k, v, err)
- } else if fmt.Sprintf("%v", v) != fmt.Sprintf("%v", value) {
- t.Fatalf("get key %q value, want %v got %v .", k, v, value)
- }
- }
- if err = jsonconf.Set("name", "astaxie"); err != nil {
- t.Fatal(err)
- }
- if jsonconf.String("name") != "astaxie" {
- t.Fatal("get name error")
+ assert.Nil(t, err)
+ assert.Equal(t, fmt.Sprintf("%v", v), fmt.Sprintf("%v", value))
}
- if db, err := jsonconf.DIY("database"); err != nil {
- t.Fatal(err)
- } else if m, ok := db.(map[string]interface{}); !ok {
- t.Log(db)
- t.Fatal("db not map[string]interface{}")
- } else {
- if m["host"].(string) != "host" {
- t.Fatal("get host err")
- }
- }
+ assert.Nil(t, jsonconf.Set("name", "astaxie"))
- if _, err := jsonconf.Int("unknown"); err == nil {
- t.Error("unknown keys should return an error when expecting an Int")
- }
+ assert.Equal(t, "astaxie", jsonconf.String("name"))
- if _, err := jsonconf.Int64("unknown"); err == nil {
- t.Error("unknown keys should return an error when expecting an Int64")
- }
+ db, err := jsonconf.DIY("database")
+ assert.Nil(t, err)
- if _, err := jsonconf.Float("unknown"); err == nil {
- t.Error("unknown keys should return an error when expecting a Float")
- }
+ m, ok := db.(map[string]interface{})
+ assert.True(t, ok)
+ assert.Equal(t,"host" , m["host"])
- if _, err := jsonconf.DIY("unknown"); err == nil {
- t.Error("unknown keys should return an error when expecting an interface{}")
- }
+ _, err = jsonconf.Int("unknown")
+ assert.NotNil(t, err)
- if val := jsonconf.String("unknown"); val != "" {
- t.Error("unknown keys should return an empty string when expecting a String")
- }
+ _, err = jsonconf.Int64("unknown")
+ assert.NotNil(t, err)
- if _, err := jsonconf.Bool("unknown"); err == nil {
- t.Error("unknown keys should return an error when expecting a Bool")
- }
+ _, err = jsonconf.Float("unknown")
+ assert.NotNil(t, err)
- if !jsonconf.DefaultBool("unknown", true) {
- t.Error("unknown keys with default value wrong")
- }
+ _, err = jsonconf.DIY("unknown")
+ assert.NotNil(t, err)
+
+ val := jsonconf.String("unknown")
+ assert.Equal(t, "", val)
+
+ _, err = jsonconf.Bool("unknown")
+ assert.NotNil(t, err)
+
+ assert.True(t, jsonconf.DefaultBool("unknown", true))
}
diff --git a/adapter/context/param/methodparams_test.go b/adapter/context/param/methodparams_test.go
index b240d087..9d5155bf 100644
--- a/adapter/context/param/methodparams_test.go
+++ b/adapter/context/param/methodparams_test.go
@@ -20,7 +20,7 @@ import (
"github.com/stretchr/testify/assert"
)
-func TestMethodParam_String(t *testing.T) {
+func TestMethodParamString(t *testing.T) {
method := New("myName", IsRequired, InHeader, Default("abc"))
s := method.String()
assert.Equal(t, `param.New("myName", param.IsRequired, param.InHeader, param.Default("abc"))`, s)
diff --git a/adapter/httplib/httplib_test.go b/adapter/httplib/httplib_test.go
index e7605c87..350f716e 100644
--- a/adapter/httplib/httplib_test.go
+++ b/adapter/httplib/httplib_test.go
@@ -25,8 +25,11 @@ import (
"time"
)
+const getUrl = "http://httpbin.org/get"
+const ipUrl = "http://httpbin.org/ip"
+
func TestResponse(t *testing.T) {
- req := Get("http://httpbin.org/get")
+ req := Get(getUrl)
resp, err := req.Response()
if err != nil {
t.Fatal(err)
@@ -63,7 +66,8 @@ func TestDoRequest(t *testing.T) {
}
func TestGet(t *testing.T) {
- req := Get("http://httpbin.org/get")
+
+ req := Get(getUrl)
b, err := req.Bytes()
if err != nil {
t.Fatal(err)
@@ -205,7 +209,7 @@ func TestWithSetting(t *testing.T) {
setting.ReadWriteTimeout = 5 * time.Second
SetDefaultSetting(setting)
- str, err := Get("http://httpbin.org/get").String()
+ str, err := Get(getUrl).String()
if err != nil {
t.Fatal(err)
}
@@ -218,7 +222,8 @@ func TestWithSetting(t *testing.T) {
}
func TestToJson(t *testing.T) {
- req := Get("http://httpbin.org/ip")
+
+ req := Get(ipUrl)
resp, err := req.Response()
if err != nil {
t.Fatal(err)
@@ -249,7 +254,7 @@ func TestToJson(t *testing.T) {
func TestToFile(t *testing.T) {
f := "beego_testfile"
- req := Get("http://httpbin.org/ip")
+ req := Get(ipUrl)
err := req.ToFile(f)
if err != nil {
t.Fatal(err)
@@ -263,7 +268,7 @@ func TestToFile(t *testing.T) {
func TestToFileDir(t *testing.T) {
f := "./files/beego_testfile"
- req := Get("http://httpbin.org/ip")
+ req := Get(ipUrl)
err := req.ToFile(f)
if err != nil {
t.Fatal(err)
diff --git a/adapter/logs/logger_test.go b/adapter/logs/logger_test.go
index 9f2cc5a5..42708fa5 100644
--- a/adapter/logs/logger_test.go
+++ b/adapter/logs/logger_test.go
@@ -18,7 +18,7 @@ import (
"testing"
)
-func TestBeeLogger_Info(t *testing.T) {
+func TestBeeLoggerInfo(t *testing.T) {
log := NewLogger(1000)
log.SetLogger("file", `{"net":"tcp","addr":":7020"}`)
}
diff --git a/adapter/metric/prometheus_test.go b/adapter/metric/prometheus_test.go
index 53984845..72212dd4 100644
--- a/adapter/metric/prometheus_test.go
+++ b/adapter/metric/prometheus_test.go
@@ -15,6 +15,7 @@
package metric
import (
+ "fmt"
"net/http"
"net/url"
"testing"
@@ -26,7 +27,9 @@ import (
)
func TestPrometheusMiddleWare(t *testing.T) {
- middleware := PrometheusMiddleWare(http.HandlerFunc(func(http.ResponseWriter, *http.Request) {}))
+ middleware := PrometheusMiddleWare(http.HandlerFunc(func(http.ResponseWriter, *http.Request) {
+ fmt.Print("you are coming")
+ }))
writer := &context.Response{}
request := &http.Request{
URL: &url.URL{
diff --git a/adapter/orm/query_setter_adapter.go b/adapter/orm/query_setter_adapter.go
index 7f506759..edea0a15 100644
--- a/adapter/orm/query_setter_adapter.go
+++ b/adapter/orm/query_setter_adapter.go
@@ -21,14 +21,16 @@ import (
type baseQuerySetter struct {
}
+const shouldNotInvoke = "you should not invoke this method."
+
func (b *baseQuerySetter) ForceIndex(indexes ...string) orm.QuerySeter {
- panic("you should not invoke this method.")
+ panic(shouldNotInvoke)
}
func (b *baseQuerySetter) UseIndex(indexes ...string) orm.QuerySeter {
- panic("you should not invoke this method.")
+ panic(shouldNotInvoke)
}
func (b *baseQuerySetter) IgnoreIndex(indexes ...string) orm.QuerySeter {
- panic("you should not invoke this method.")
+ panic(shouldNotInvoke)
}
diff --git a/adapter/orm/utils_test.go b/adapter/orm/utils_test.go
index 7d94cada..fbf8663e 100644
--- a/adapter/orm/utils_test.go
+++ b/adapter/orm/utils_test.go
@@ -16,6 +16,8 @@ package orm
import (
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestCamelString(t *testing.T) {
@@ -29,9 +31,7 @@ func TestCamelString(t *testing.T) {
for _, v := range snake {
res := camelString(v)
- if res != answer[v] {
- t.Error("Unit Test Fail:", v, res, answer[v])
- }
+ assert.Equal(t, answer[v], res)
}
}
@@ -46,9 +46,7 @@ func TestSnakeString(t *testing.T) {
for _, v := range camel {
res := snakeString(v)
- if res != answer[v] {
- t.Error("Unit Test Fail:", v, res, answer[v])
- }
+ assert.Equal(t, answer[v], res)
}
}
@@ -63,8 +61,6 @@ func TestSnakeStringWithAcronym(t *testing.T) {
for _, v := range camel {
res := snakeStringWithAcronym(v)
- if res != answer[v] {
- t.Error("Unit Test Fail:", v, res, answer[v])
- }
+ assert.Equal(t, answer[v], res)
}
}
diff --git a/adapter/plugins/authz/authz_test.go b/adapter/plugins/authz/authz_test.go
index fa5410ca..4963ceab 100644
--- a/adapter/plugins/authz/authz_test.go
+++ b/adapter/plugins/authz/authz_test.go
@@ -26,6 +26,11 @@ import (
"github.com/beego/beego/v2/adapter/plugins/auth"
)
+const (
+ authCfg = "authz_model.conf"
+ authCsv = "authz_policy.csv"
+)
+
func testRequest(t *testing.T, handler *beego.ControllerRegister, user string, path string, method string, code int) {
r, _ := http.NewRequest(method, path, nil)
r.SetBasicAuth(user, "123")
@@ -40,70 +45,79 @@ func testRequest(t *testing.T, handler *beego.ControllerRegister, user string, p
func TestBasic(t *testing.T) {
handler := beego.NewControllerRegister()
- handler.InsertFilter("*", beego.BeforeRouter, auth.Basic("alice", "123"))
- handler.InsertFilter("*", beego.BeforeRouter, NewAuthorizer(casbin.NewEnforcer("authz_model.conf", "authz_policy.csv")))
+ _ = handler.InsertFilter("*", beego.BeforeRouter, auth.Basic("alice", "123"))
+
+ _ = handler.InsertFilter("*", beego.BeforeRouter, NewAuthorizer(casbin.NewEnforcer(authCfg, authCsv)))
handler.Any("*", func(ctx *context.Context) {
ctx.Output.SetStatus(200)
})
- testRequest(t, handler, "alice", "/dataset1/resource1", "GET", 200)
- testRequest(t, handler, "alice", "/dataset1/resource1", "POST", 200)
- testRequest(t, handler, "alice", "/dataset1/resource2", "GET", 200)
- testRequest(t, handler, "alice", "/dataset1/resource2", "POST", 403)
+ const d1r1 = "/dataset1/resource1"
+ testRequest(t, handler, "alice", d1r1, "GET", 200)
+ testRequest(t, handler, "alice", d1r1, "POST", 200)
+ const d1r2 = "/dataset1/resource2"
+ testRequest(t, handler, "alice", d1r2, "GET", 200)
+ testRequest(t, handler, "alice", d1r2, "POST", 403)
}
func TestPathWildcard(t *testing.T) {
handler := beego.NewControllerRegister()
- handler.InsertFilter("*", beego.BeforeRouter, auth.Basic("bob", "123"))
- handler.InsertFilter("*", beego.BeforeRouter, NewAuthorizer(casbin.NewEnforcer("authz_model.conf", "authz_policy.csv")))
+ _ = handler.InsertFilter("*", beego.BeforeRouter, auth.Basic("bob", "123"))
+ _ = handler.InsertFilter("*", beego.BeforeRouter, NewAuthorizer(casbin.NewEnforcer(authCfg, authCsv)))
handler.Any("*", func(ctx *context.Context) {
ctx.Output.SetStatus(200)
})
- testRequest(t, handler, "bob", "/dataset2/resource1", "GET", 200)
- testRequest(t, handler, "bob", "/dataset2/resource1", "POST", 200)
- testRequest(t, handler, "bob", "/dataset2/resource1", "DELETE", 200)
- testRequest(t, handler, "bob", "/dataset2/resource2", "GET", 200)
- testRequest(t, handler, "bob", "/dataset2/resource2", "POST", 403)
- testRequest(t, handler, "bob", "/dataset2/resource2", "DELETE", 403)
+ const d2r1 = "/dataset2/resource1"
+ testRequest(t, handler, "bob", d2r1, "GET", 200)
+ testRequest(t, handler, "bob", d2r1, "POST", 200)
+ testRequest(t, handler, "bob", d2r1, "DELETE", 200)
+ const d2r2 = "/dataset2/resource2"
+ testRequest(t, handler, "bob", d2r2, "GET", 200)
+ testRequest(t, handler, "bob", d2r2, "POST", 403)
+ testRequest(t, handler, "bob", d2r2, "DELETE", 403)
- testRequest(t, handler, "bob", "/dataset2/folder1/item1", "GET", 403)
- testRequest(t, handler, "bob", "/dataset2/folder1/item1", "POST", 200)
- testRequest(t, handler, "bob", "/dataset2/folder1/item1", "DELETE", 403)
- testRequest(t, handler, "bob", "/dataset2/folder1/item2", "GET", 403)
- testRequest(t, handler, "bob", "/dataset2/folder1/item2", "POST", 200)
- testRequest(t, handler, "bob", "/dataset2/folder1/item2", "DELETE", 403)
+ const item1 = "/dataset2/folder1/item1"
+ testRequest(t, handler, "bob", item1, "GET", 403)
+ testRequest(t, handler, "bob", item1, "POST", 200)
+ testRequest(t, handler, "bob", item1, "DELETE", 403)
+ const item2 = "/dataset2/folder1/item2"
+ testRequest(t, handler, "bob", item2, "GET", 403)
+ testRequest(t, handler, "bob", item2, "POST", 200)
+ testRequest(t, handler, "bob", item2, "DELETE", 403)
}
func TestRBAC(t *testing.T) {
handler := beego.NewControllerRegister()
- handler.InsertFilter("*", beego.BeforeRouter, auth.Basic("cathy", "123"))
- e := casbin.NewEnforcer("authz_model.conf", "authz_policy.csv")
- handler.InsertFilter("*", beego.BeforeRouter, NewAuthorizer(e))
+ _ = handler.InsertFilter("*", beego.BeforeRouter, auth.Basic("cathy", "123"))
+ e := casbin.NewEnforcer(authCfg, authCsv)
+ _ = handler.InsertFilter("*", beego.BeforeRouter, NewAuthorizer(e))
handler.Any("*", func(ctx *context.Context) {
ctx.Output.SetStatus(200)
})
// cathy can access all /dataset1/* resources via all methods because it has the dataset1_admin role.
- testRequest(t, handler, "cathy", "/dataset1/item", "GET", 200)
- testRequest(t, handler, "cathy", "/dataset1/item", "POST", 200)
- testRequest(t, handler, "cathy", "/dataset1/item", "DELETE", 200)
- testRequest(t, handler, "cathy", "/dataset2/item", "GET", 403)
- testRequest(t, handler, "cathy", "/dataset2/item", "POST", 403)
- testRequest(t, handler, "cathy", "/dataset2/item", "DELETE", 403)
+ const dataSet1 = "/dataset1/item"
+ testRequest(t, handler, "cathy", dataSet1, "GET", 200)
+ testRequest(t, handler, "cathy", dataSet1, "POST", 200)
+ testRequest(t, handler, "cathy", dataSet1, "DELETE", 200)
+ const dataSet2 = "/dataset2/item"
+ testRequest(t, handler, "cathy", dataSet2, "GET", 403)
+ testRequest(t, handler, "cathy", dataSet2, "POST", 403)
+ testRequest(t, handler, "cathy", dataSet2, "DELETE", 403)
// delete all roles on user cathy, so cathy cannot access any resources now.
e.DeleteRolesForUser("cathy")
- testRequest(t, handler, "cathy", "/dataset1/item", "GET", 403)
- testRequest(t, handler, "cathy", "/dataset1/item", "POST", 403)
- testRequest(t, handler, "cathy", "/dataset1/item", "DELETE", 403)
- testRequest(t, handler, "cathy", "/dataset2/item", "GET", 403)
- testRequest(t, handler, "cathy", "/dataset2/item", "POST", 403)
- testRequest(t, handler, "cathy", "/dataset2/item", "DELETE", 403)
+ testRequest(t, handler, "cathy", dataSet1, "GET", 403)
+ testRequest(t, handler, "cathy", dataSet1, "POST", 403)
+ testRequest(t, handler, "cathy", dataSet1, "DELETE", 403)
+ testRequest(t, handler, "cathy", dataSet2, "GET", 403)
+ testRequest(t, handler, "cathy", dataSet2, "POST", 403)
+ testRequest(t, handler, "cathy", dataSet2, "DELETE", 403)
}
diff --git a/adapter/session/redis_sentinel/sess_redis_sentinel_test.go b/adapter/session/redis_sentinel/sess_redis_sentinel_test.go
index 0a6249ee..b08d0256 100644
--- a/adapter/session/redis_sentinel/sess_redis_sentinel_test.go
+++ b/adapter/session/redis_sentinel/sess_redis_sentinel_test.go
@@ -5,6 +5,8 @@ import (
"net/http/httptest"
"testing"
+ "github.com/stretchr/testify/assert"
+
"github.com/beego/beego/v2/adapter/session"
)
@@ -19,71 +21,55 @@ func TestRedisSentinel(t *testing.T) {
ProviderConfig: "127.0.0.1:6379,100,,0,master",
}
globalSessions, e := session.NewManager("redis_sentinel", sessionConfig)
+
if e != nil {
t.Log(e)
return
}
- // todo test if e==nil
+
go globalSessions.GC()
r, _ := http.NewRequest("GET", "/", nil)
w := httptest.NewRecorder()
sess, err := globalSessions.SessionStart(w, r)
- if err != nil {
- t.Fatal("session start failed:", err)
- }
+ assert.Nil(t, err)
defer sess.SessionRelease(w)
// SET AND GET
err = sess.Set("username", "astaxie")
- if err != nil {
- t.Fatal("set username failed:", err)
- }
+ assert.Nil(t, err)
username := sess.Get("username")
- if username != "astaxie" {
- t.Fatal("get username failed")
- }
+ assert.Equal(t, "astaxie", username)
// DELETE
err = sess.Delete("username")
- if err != nil {
- t.Fatal("delete username failed:", err)
- }
+ assert.Nil(t, err)
+
username = sess.Get("username")
- if username != nil {
- t.Fatal("delete username failed")
- }
+ assert.Nil(t, username)
// FLUSH
err = sess.Set("username", "astaxie")
- if err != nil {
- t.Fatal("set failed:", err)
- }
+ assert.Nil(t, err)
+
err = sess.Set("password", "1qaz2wsx")
- if err != nil {
- t.Fatal("set failed:", err)
- }
+ assert.Nil(t, err)
+
username = sess.Get("username")
- if username != "astaxie" {
- t.Fatal("get username failed")
- }
+ assert.Equal(t, "astaxie", username)
+
password := sess.Get("password")
- if password != "1qaz2wsx" {
- t.Fatal("get password failed")
- }
+ assert.Equal(t, "1qaz2wsx", password)
+
err = sess.Flush()
- if err != nil {
- t.Fatal("flush failed:", err)
- }
+ assert.Nil(t, err)
+
username = sess.Get("username")
- if username != nil {
- t.Fatal("flush failed")
- }
+ assert.Nil(t, username)
+
password = sess.Get("password")
- if password != nil {
- t.Fatal("flush failed")
- }
+ assert.Nil(t, password)
sess.SessionRelease(w)
diff --git a/adapter/session/sess_cookie_test.go b/adapter/session/sess_cookie_test.go
index b6726005..5d6b44e3 100644
--- a/adapter/session/sess_cookie_test.go
+++ b/adapter/session/sess_cookie_test.go
@@ -22,6 +22,8 @@ import (
"testing"
)
+const setCookieKey = "Set-Cookie"
+
func TestCookie(t *testing.T) {
config := `{"cookieName":"gosessionid","enableSetCookie":false,"gclifetime":3600,"ProviderConfig":"{\"cookieName\":\"gosessionid\",\"securityKey\":\"beegocookiehashkey\"}"}`
conf := new(ManagerConfig)
@@ -46,7 +48,8 @@ func TestCookie(t *testing.T) {
t.Fatal("get username error")
}
sess.SessionRelease(w)
- if cookiestr := w.Header().Get("Set-Cookie"); cookiestr == "" {
+
+ if cookiestr := w.Header().Get(setCookieKey); cookiestr == "" {
t.Fatal("setcookie error")
} else {
parts := strings.Split(strings.TrimSpace(cookiestr), ";")
@@ -79,7 +82,7 @@ func TestDestorySessionCookie(t *testing.T) {
// request again ,will get same sesssion id .
r1, _ := http.NewRequest("GET", "/", nil)
- r1.Header.Set("Cookie", w.Header().Get("Set-Cookie"))
+ r1.Header.Set("Cookie", w.Header().Get(setCookieKey))
w = httptest.NewRecorder()
newSession, err := globalSessions.SessionStart(w, r1)
if err != nil {
@@ -92,7 +95,7 @@ func TestDestorySessionCookie(t *testing.T) {
// After destroy session , will get a new session id .
globalSessions.SessionDestroy(w, r1)
r2, _ := http.NewRequest("GET", "/", nil)
- r2.Header.Set("Cookie", w.Header().Get("Set-Cookie"))
+ r2.Header.Set("Cookie", w.Header().Get(setCookieKey))
w = httptest.NewRecorder()
newSession, err = globalSessions.SessionStart(w, r2)
diff --git a/adapter/templatefunc_test.go b/adapter/templatefunc_test.go
index f5113606..2fd18e3d 100644
--- a/adapter/templatefunc_test.go
+++ b/adapter/templatefunc_test.go
@@ -19,19 +19,15 @@ import (
"net/url"
"testing"
"time"
+
+ "github.com/stretchr/testify/assert"
)
func TestSubstr(t *testing.T) {
s := `012345`
- if Substr(s, 0, 2) != "01" {
- t.Error("should be equal")
- }
- if Substr(s, 0, 100) != "012345" {
- t.Error("should be equal")
- }
- if Substr(s, 12, 100) != "012345" {
- t.Error("should be equal")
- }
+ assert.Equal(t, "01", Substr(s, 0, 2))
+ assert.Equal(t, "012345", Substr(s, 0, 100))
+ assert.Equal(t, "012345", Substr(s, 12, 100))
}
func TestHtml2str(t *testing.T) {
@@ -39,73 +35,51 @@ func TestHtml2str(t *testing.T) {
\n`
- if HTML2str(h) != "123\\n\n\\n" {
- t.Error("should be equal")
- }
+ assert.Equal(t, "123\\n\n\\n", HTML2str(h))
}
func TestDateFormat(t *testing.T) {
ts := "Mon, 01 Jul 2013 13:27:42 CST"
tt, _ := time.Parse(time.RFC1123, ts)
- if ss := DateFormat(tt, "2006-01-02 15:04:05"); ss != "2013-07-01 13:27:42" {
- t.Errorf("2013-07-01 13:27:42 does not equal %v", ss)
- }
+ assert.Equal(t, "2013-07-01 13:27:42", DateFormat(tt, "2006-01-02 15:04:05"))
}
func TestDate(t *testing.T) {
ts := "Mon, 01 Jul 2013 13:27:42 CST"
tt, _ := time.Parse(time.RFC1123, ts)
- if ss := Date(tt, "Y-m-d H:i:s"); ss != "2013-07-01 13:27:42" {
- t.Errorf("2013-07-01 13:27:42 does not equal %v", ss)
- }
- if ss := Date(tt, "y-n-j h:i:s A"); ss != "13-7-1 01:27:42 PM" {
- t.Errorf("13-7-1 01:27:42 PM does not equal %v", ss)
- }
- if ss := Date(tt, "D, d M Y g:i:s a"); ss != "Mon, 01 Jul 2013 1:27:42 pm" {
- t.Errorf("Mon, 01 Jul 2013 1:27:42 pm does not equal %v", ss)
- }
- if ss := Date(tt, "l, d F Y G:i:s"); ss != "Monday, 01 July 2013 13:27:42" {
- t.Errorf("Monday, 01 July 2013 13:27:42 does not equal %v", ss)
- }
+ assert.Equal(t, "2013-07-01 13:27:42", Date(tt, "Y-m-d H:i:s"))
+
+ assert.Equal(t, "13-7-1 01:27:42 PM", Date(tt, "y-n-j h:i:s A"))
+ assert.Equal(t, "Mon, 01 Jul 2013 1:27:42 pm", Date(tt, "D, d M Y g:i:s a"))
+ assert.Equal(t, "Monday, 01 July 2013 13:27:42", Date(tt, "l, d F Y G:i:s"))
}
func TestCompareRelated(t *testing.T) {
- if !Compare("abc", "abc") {
- t.Error("should be equal")
- }
- if Compare("abc", "aBc") {
- t.Error("should be not equal")
- }
- if !Compare("1", 1) {
- t.Error("should be equal")
- }
- if CompareNot("abc", "abc") {
- t.Error("should be equal")
- }
- if !CompareNot("abc", "aBc") {
- t.Error("should be not equal")
- }
- if !NotNil("a string") {
- t.Error("should not be nil")
- }
+ assert.True(t, Compare("abc", "abc"))
+
+ assert.False(t, Compare("abc", "aBc"))
+
+ assert.True(t, Compare("1", 1))
+
+ assert.False(t, CompareNot("abc", "abc"))
+
+ assert.True(t, CompareNot("abc", "aBc"))
+ assert.True(t, NotNil("a string"))
}
func TestHtmlquote(t *testing.T) {
h := `<' ”“&">`
s := `<' ”“&">`
- if Htmlquote(s) != h {
- t.Error("should be equal")
- }
+ assert.Equal(t, h, Htmlquote(s))
}
func TestHtmlunquote(t *testing.T) {
h := `<' ”“&">`
s := `<' ”“&">`
- if Htmlunquote(h) != s {
- t.Error("should be equal")
- }
+ assert.Equal(t, s, Htmlunquote(h))
+
}
func TestParseForm(t *testing.T) {
@@ -148,55 +122,42 @@ func TestParseForm(t *testing.T) {
"hobby": []string{"", "Basketball", "Football"},
"memo": []string{"nothing"},
}
- if err := ParseForm(form, u); err == nil {
- t.Fatal("nothing will be changed")
- }
- if err := ParseForm(form, &u); err != nil {
- t.Fatal(err)
- }
- if u.ID != 0 {
- t.Errorf("ID should equal 0 but got %v", u.ID)
- }
- if len(u.tag) != 0 {
- t.Errorf("tag's length should equal 0 but got %v", len(u.tag))
- }
- if u.Name.(string) != "test" {
- t.Errorf("Name should equal `test` but got `%v`", u.Name.(string))
- }
- if u.Age != 40 {
- t.Errorf("Age should equal 40 but got %v", u.Age)
- }
- if u.Email != "test@gmail.com" {
- t.Errorf("Email should equal `test@gmail.com` but got `%v`", u.Email)
- }
- if u.Intro != "I am an engineer!" {
- t.Errorf("Intro should equal `I am an engineer!` but got `%v`", u.Intro)
- }
- if !u.StrBool {
- t.Errorf("strboll should equal `true`, but got `%v`", u.StrBool)
- }
+
+ assert.NotNil(t, ParseForm(form, u))
+
+ assert.Nil(t, ParseForm(form, &u))
+
+ assert.Equal(t, 0, u.ID)
+
+ assert.Equal(t, 0, len(u.tag))
+
+ assert.Equal(t, "test", u.Name)
+
+ assert.Equal(t, 40, u.Age)
+
+ assert.Equal(t, "test@gmail.com", u.Email)
+
+ assert.Equal(t, "I am an engineer!", u.Intro)
+
+ assert.True(t, u.StrBool)
+
y, m, d := u.Date.Date()
- if y != 2014 || m.String() != "November" || d != 12 {
- t.Errorf("Date should equal `2014-11-12`, but got `%v`", u.Date.String())
- }
- if u.Organization != "beego" {
- t.Errorf("Organization should equal `beego`, but got `%v`", u.Organization)
- }
- if u.Title != "CXO" {
- t.Errorf("Title should equal `CXO`, but got `%v`", u.Title)
- }
- if u.Hobby[0] != "" {
- t.Errorf("Hobby should equal ``, but got `%v`", u.Hobby[0])
- }
- if u.Hobby[1] != "Basketball" {
- t.Errorf("Hobby should equal `Basketball`, but got `%v`", u.Hobby[1])
- }
- if u.Hobby[2] != "Football" {
- t.Errorf("Hobby should equal `Football`, but got `%v`", u.Hobby[2])
- }
- if len(u.Memo) != 0 {
- t.Errorf("Memo's length should equal 0 but got %v", len(u.Memo))
- }
+
+ assert.Equal(t, 2014, y)
+ assert.Equal(t, "November", m.String())
+ assert.Equal(t, 12, d)
+
+ assert.Equal(t, "beego", u.Organization)
+
+ assert.Equal(t, "CXO", u.Title)
+
+ assert.Equal(t, "", u.Hobby[0])
+
+ assert.Equal(t, "Basketball", u.Hobby[1])
+
+ assert.Equal(t, "Football", u.Hobby[2])
+
+ assert.Equal(t, 0, len(u.Memo))
}
func TestRenderForm(t *testing.T) {
@@ -212,18 +173,14 @@ func TestRenderForm(t *testing.T) {
u := user{Name: "test", Intro: "Some Text"}
output := RenderForm(u)
- if output != template.HTML("") {
- t.Errorf("output should be empty but got %v", output)
- }
+ assert.Equal(t, template.HTML(""), output)
output = RenderForm(&u)
result := template.HTML(
`Name: ` +
`年龄:` +
`Sex: ` +
`Intro: `)
- if output != result {
- t.Errorf("output should equal `%v` but got `%v`", result, output)
- }
+ assert.Equal(t, result, output)
}
func TestMapGet(t *testing.T) {
@@ -233,29 +190,18 @@ func TestMapGet(t *testing.T) {
"1": 2,
}
- if res, err := MapGet(m1, "a"); err == nil {
- if res.(int64) != 1 {
- t.Errorf("Should return 1, but return %v", res)
- }
- } else {
- t.Errorf("Error happens %v", err)
- }
+ res, err := MapGet(m1, "a")
+ assert.Nil(t, err)
+ assert.Equal(t, int64(1), res)
- if res, err := MapGet(m1, "1"); err == nil {
- if res.(int64) != 2 {
- t.Errorf("Should return 2, but return %v", res)
- }
- } else {
- t.Errorf("Error happens %v", err)
- }
+ res, err = MapGet(m1, "1")
+ assert.Nil(t, err)
+ assert.Equal(t, int64(2), res)
- if res, err := MapGet(m1, 1); err == nil {
- if res.(int64) != 2 {
- t.Errorf("Should return 2, but return %v", res)
- }
- } else {
- t.Errorf("Error happens %v", err)
- }
+
+ res, err = MapGet(m1, 1)
+ assert.Nil(t, err)
+ assert.Equal(t, int64(2), res)
// test 2 level map
m2 := M{
@@ -264,13 +210,9 @@ func TestMapGet(t *testing.T) {
},
}
- if res, err := MapGet(m2, 1, 2); err == nil {
- if res.(float64) != 3.5 {
- t.Errorf("Should return 3.5, but return %v", res)
- }
- } else {
- t.Errorf("Error happens %v", err)
- }
+ res, err = MapGet(m2, 1, 2)
+ assert.Nil(t, err)
+ assert.Equal(t, 3.5, res)
// test 5 level map
m5 := M{
@@ -285,20 +227,13 @@ func TestMapGet(t *testing.T) {
},
}
- if res, err := MapGet(m5, 1, 2, 3, 4, 5); err == nil {
- if res.(float64) != 1.2 {
- t.Errorf("Should return 1.2, but return %v", res)
- }
- } else {
- t.Errorf("Error happens %v", err)
- }
+ res, err = MapGet(m5, 1, 2, 3, 4, 5)
+ assert.Nil(t, err)
+ assert.Equal(t, 1.2, res)
// check whether element not exists in map
- if res, err := MapGet(m5, 5, 4, 3, 2, 1); err == nil {
- if res != nil {
- t.Errorf("Should return nil, but return %v", res)
- }
- } else {
- t.Errorf("Error happens %v", err)
- }
+ res, err = MapGet(m5, 5, 4, 3, 2, 1)
+ assert.Nil(t, err)
+ assert.Nil(t, res)
+
}
diff --git a/adapter/toolbox/statistics_test.go b/adapter/toolbox/statistics_test.go
index ac29476c..f4371c3f 100644
--- a/adapter/toolbox/statistics_test.go
+++ b/adapter/toolbox/statistics_test.go
@@ -21,13 +21,16 @@ import (
)
func TestStatics(t *testing.T) {
- StatisticsMap.AddStatistics("POST", "/api/user", "&admin.user", time.Duration(2000))
- StatisticsMap.AddStatistics("POST", "/api/user", "&admin.user", time.Duration(120000))
- StatisticsMap.AddStatistics("GET", "/api/user", "&admin.user", time.Duration(13000))
- StatisticsMap.AddStatistics("POST", "/api/admin", "&admin.user", time.Duration(14000))
- StatisticsMap.AddStatistics("POST", "/api/user/astaxie", "&admin.user", time.Duration(12000))
- StatisticsMap.AddStatistics("POST", "/api/user/xiemengjun", "&admin.user", time.Duration(13000))
- StatisticsMap.AddStatistics("DELETE", "/api/user", "&admin.user", time.Duration(1400))
+ userApi := "/api/user"
+ post := "POST"
+ adminUser := "&admin.user"
+ StatisticsMap.AddStatistics(post, userApi, adminUser, time.Duration(2000))
+ StatisticsMap.AddStatistics(post, userApi, adminUser, time.Duration(120000))
+ StatisticsMap.AddStatistics("GET", userApi, adminUser, time.Duration(13000))
+ StatisticsMap.AddStatistics(post, "/api/admin", adminUser, time.Duration(14000))
+ StatisticsMap.AddStatistics(post, "/api/user/astaxie", adminUser, time.Duration(12000))
+ StatisticsMap.AddStatistics(post, "/api/user/xiemengjun", adminUser, time.Duration(13000))
+ StatisticsMap.AddStatistics("DELETE", userApi, adminUser, time.Duration(1400))
t.Log(StatisticsMap.GetMap())
data := StatisticsMap.GetMapData()
diff --git a/adapter/utils/rand_test.go b/adapter/utils/rand_test.go
index 6c238b5e..1cb26029 100644
--- a/adapter/utils/rand_test.go
+++ b/adapter/utils/rand_test.go
@@ -16,7 +16,7 @@ package utils
import "testing"
-func TestRand_01(t *testing.T) {
+func TestRand01(t *testing.T) {
bs0 := RandomCreateBytes(16)
bs1 := RandomCreateBytes(16)
diff --git a/adapter/validation/validation_test.go b/adapter/validation/validation_test.go
index b4b5b1b6..2e29b641 100644
--- a/adapter/validation/validation_test.go
+++ b/adapter/validation/validation_test.go
@@ -18,131 +18,83 @@ import (
"regexp"
"testing"
"time"
+
+ "github.com/stretchr/testify/assert"
)
func TestRequired(t *testing.T) {
valid := Validation{}
- if valid.Required(nil, "nil").Ok {
- t.Error("nil object should be false")
- }
- if !valid.Required(true, "bool").Ok {
- t.Error("Bool value should always return true")
- }
- if !valid.Required(false, "bool").Ok {
- t.Error("Bool value should always return true")
- }
- if valid.Required("", "string").Ok {
- t.Error("\"'\" string should be false")
- }
- if valid.Required(" ", "string").Ok {
- t.Error("\" \" string should be false") // For #2361
- }
- if valid.Required("\n", "string").Ok {
- t.Error("new line string should be false") // For #2361
- }
- if !valid.Required("astaxie", "string").Ok {
- t.Error("string should be true")
- }
- if valid.Required(0, "zero").Ok {
- t.Error("Integer should not be equal 0")
- }
- if !valid.Required(1, "int").Ok {
- t.Error("Integer except 0 should be true")
- }
- if !valid.Required(time.Now(), "time").Ok {
- t.Error("time should be true")
- }
- if valid.Required([]string{}, "emptySlice").Ok {
- t.Error("empty slice should be false")
- }
- if !valid.Required([]interface{}{"ok"}, "slice").Ok {
- t.Error("slice should be true")
- }
+ assert.False(t, valid.Required(nil, "nil").Ok)
+ assert.True(t, valid.Required(true, "bool").Ok)
+
+ assert.True(t, valid.Required(false, "bool").Ok)
+ assert.False(t, valid.Required("", "string").Ok)
+ assert.False(t, valid.Required(" ", "string").Ok)
+ assert.False(t, valid.Required("\n", "string").Ok)
+
+ assert.True(t, valid.Required("astaxie", "string").Ok)
+ assert.False(t, valid.Required(0, "zero").Ok)
+
+ assert.True(t, valid.Required(1, "int").Ok)
+
+ assert.True(t, valid.Required(time.Now(), "time").Ok)
+
+ assert.False(t, valid.Required([]string{}, "emptySlice").Ok)
+
+ assert.True(t, valid.Required([]interface{}{"ok"}, "slice").Ok)
}
func TestMin(t *testing.T) {
valid := Validation{}
- if valid.Min(-1, 0, "min0").Ok {
- t.Error("-1 is less than the minimum value of 0 should be false")
- }
- if !valid.Min(1, 0, "min0").Ok {
- t.Error("1 is greater or equal than the minimum value of 0 should be true")
- }
+ assert.False(t, valid.Min(-1, 0, "min0").Ok)
+ assert.True(t, valid.Min(1, 0, "min0").Ok)
+
}
func TestMax(t *testing.T) {
valid := Validation{}
- if valid.Max(1, 0, "max0").Ok {
- t.Error("1 is greater than the minimum value of 0 should be false")
- }
- if !valid.Max(-1, 0, "max0").Ok {
- t.Error("-1 is less or equal than the maximum value of 0 should be true")
- }
+ assert.False(t, valid.Max(1, 0, "max0").Ok)
+ assert.True(t, valid.Max(-1, 0, "max0").Ok)
}
func TestRange(t *testing.T) {
valid := Validation{}
- if valid.Range(-1, 0, 1, "range0_1").Ok {
- t.Error("-1 is between 0 and 1 should be false")
- }
- if !valid.Range(1, 0, 1, "range0_1").Ok {
- t.Error("1 is between 0 and 1 should be true")
- }
+ assert.False(t, valid.Range(-1, 0, 1, "range0_1").Ok)
+
+ assert.True(t, valid.Range(1, 0, 1, "range0_1").Ok)
}
func TestMinSize(t *testing.T) {
valid := Validation{}
- if valid.MinSize("", 1, "minSize1").Ok {
- t.Error("the length of \"\" is less than the minimum value of 1 should be false")
- }
- if !valid.MinSize("ok", 1, "minSize1").Ok {
- t.Error("the length of \"ok\" is greater or equal than the minimum value of 1 should be true")
- }
- if valid.MinSize([]string{}, 1, "minSize1").Ok {
- t.Error("the length of empty slice is less than the minimum value of 1 should be false")
- }
- if !valid.MinSize([]interface{}{"ok"}, 1, "minSize1").Ok {
- t.Error("the length of [\"ok\"] is greater or equal than the minimum value of 1 should be true")
- }
+ assert.False(t, valid.MinSize("", 1, "minSize1").Ok)
+
+ assert.True(t, valid.MinSize("ok", 1, "minSize1").Ok)
+ assert.False(t, valid.MinSize([]string{}, 1, "minSize1").Ok)
+ assert.True(t, valid.MinSize([]interface{}{"ok"}, 1, "minSize1").Ok)
}
func TestMaxSize(t *testing.T) {
valid := Validation{}
- if valid.MaxSize("ok", 1, "maxSize1").Ok {
- t.Error("the length of \"ok\" is greater than the maximum value of 1 should be false")
- }
- if !valid.MaxSize("", 1, "maxSize1").Ok {
- t.Error("the length of \"\" is less or equal than the maximum value of 1 should be true")
- }
- if valid.MaxSize([]interface{}{"ok", false}, 1, "maxSize1").Ok {
- t.Error("the length of [\"ok\", false] is greater than the maximum value of 1 should be false")
- }
- if !valid.MaxSize([]string{}, 1, "maxSize1").Ok {
- t.Error("the length of empty slice is less or equal than the maximum value of 1 should be true")
- }
+ assert.False(t, valid.MaxSize("ok", 1, "maxSize1").Ok)
+ assert.True(t, valid.MaxSize("", 1, "maxSize1").Ok)
+ assert.False(t, valid.MaxSize([]interface{}{"ok", false}, 1, "maxSize1").Ok)
+ assert.True(t, valid.MaxSize([]string{}, 1, "maxSize1").Ok)
}
func TestLength(t *testing.T) {
valid := Validation{}
- if valid.Length("", 1, "length1").Ok {
- t.Error("the length of \"\" must equal 1 should be false")
- }
- if !valid.Length("1", 1, "length1").Ok {
- t.Error("the length of \"1\" must equal 1 should be true")
- }
- if valid.Length([]string{}, 1, "length1").Ok {
- t.Error("the length of empty slice must equal 1 should be false")
- }
- if !valid.Length([]interface{}{"ok"}, 1, "length1").Ok {
- t.Error("the length of [\"ok\"] must equal 1 should be true")
- }
+ assert.False(t, valid.Length("", 1, "length1").Ok)
+ assert.True(t, valid.Length("1", 1, "length1").Ok)
+
+ assert.False(t, valid.Length([]string{}, 1, "length1").Ok)
+ assert.True(t, valid.Length([]interface{}{"ok"}, 1, "length1").Ok)
}
func TestAlpha(t *testing.T) {
@@ -178,13 +130,16 @@ func TestAlphaNumeric(t *testing.T) {
}
}
+const email = "suchuangji@gmail.com"
+
func TestMatch(t *testing.T) {
valid := Validation{}
if valid.Match("suchuangji@gmail", regexp.MustCompile(`^\w+@\w+\.\w+$`), "match").Ok {
t.Error("\"suchuangji@gmail\" match \"^\\w+@\\w+\\.\\w+$\" should be false")
}
- if !valid.Match("suchuangji@gmail.com", regexp.MustCompile(`^\w+@\w+\.\w+$`), "match").Ok {
+
+ if !valid.Match(email, regexp.MustCompile(`^\w+@\w+\.\w+$`), "match").Ok {
t.Error("\"suchuangji@gmail\" match \"^\\w+@\\w+\\.\\w+$\" should be true")
}
}
@@ -217,7 +172,7 @@ func TestEmail(t *testing.T) {
if valid.Email("not@a email", "email").Ok {
t.Error("\"not@a email\" is a valid email address should be false")
}
- if !valid.Email("suchuangji@gmail.com", "email").Ok {
+ if !valid.Email(email, "email").Ok {
t.Error("\"suchuangji@gmail.com\" is a valid email address should be true")
}
if valid.Email("@suchuangji@gmail.com", "email").Ok {
@@ -242,7 +197,7 @@ func TestIP(t *testing.T) {
func TestBase64(t *testing.T) {
valid := Validation{}
- if valid.Base64("suchuangji@gmail.com", "base64").Ok {
+ if valid.Base64(email, "base64").Ok {
t.Error("\"suchuangji@gmail.com\" are a valid base64 characters should be false")
}
if !valid.Base64("c3VjaHVhbmdqaUBnbWFpbC5jb20=", "base64").Ok {
@@ -370,44 +325,25 @@ func TestValid(t *testing.T) {
u := user{Name: "test@/test/;com", Age: 40}
b, err := valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if !b {
- t.Error("validation should be passed")
- }
+ assert.Nil(t, err)
+ assert.True(t, b)
uptr := &user{Name: "test", Age: 40}
valid.Clear()
b, err = valid.Valid(uptr)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Error("validation should not be passed")
- }
- if len(valid.Errors) != 1 {
- t.Fatalf("valid errors len should be 1 but got %d", len(valid.Errors))
- }
- if valid.Errors[0].Key != "Name.Match" {
- t.Errorf("Message key should be `Name.Match` but got %s", valid.Errors[0].Key)
- }
+
+ assert.Nil(t, err)
+ assert.False(t, b)
+ assert.Equal(t, 1, len(valid.Errors))
+ assert.Equal(t, "Name.Match", valid.Errors[0].Key)
u = user{Name: "test@/test/;com", Age: 180}
valid.Clear()
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Error("validation should not be passed")
- }
- if len(valid.Errors) != 1 {
- t.Fatalf("valid errors len should be 1 but got %d", len(valid.Errors))
- }
- if valid.Errors[0].Key != "Age.Range." {
- t.Errorf("Message key should be `Age.Range` but got %s", valid.Errors[0].Key)
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
+ assert.Equal(t, 1, len(valid.Errors))
+ assert.Equal(t, "Age.Range.", valid.Errors[0].Key)
}
func TestRecursiveValid(t *testing.T) {
@@ -432,12 +368,8 @@ func TestRecursiveValid(t *testing.T) {
u := Account{Password: "abc123_", U: User{}}
b, err := valid.RecursiveValid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Error("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
}
func TestSkipValid(t *testing.T) {
@@ -474,21 +406,13 @@ func TestSkipValid(t *testing.T) {
valid := Validation{}
b, err := valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Fatal("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
valid = Validation{RequiredFirst: true}
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if !b {
- t.Fatal("validation should be passed")
- }
+ assert.Nil(t, err)
+ assert.True(t, b)
}
func TestPointer(t *testing.T) {
@@ -506,12 +430,8 @@ func TestPointer(t *testing.T) {
valid := Validation{}
b, err := valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Fatal("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
validEmail := "a@a.com"
u = User{
@@ -521,12 +441,8 @@ func TestPointer(t *testing.T) {
valid = Validation{RequiredFirst: true}
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if !b {
- t.Fatal("validation should be passed")
- }
+ assert.Nil(t, err)
+ assert.True(t, b)
u = User{
ReqEmail: &validEmail,
@@ -535,12 +451,8 @@ func TestPointer(t *testing.T) {
valid = Validation{}
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Fatal("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
invalidEmail := "a@a"
u = User{
@@ -550,12 +462,8 @@ func TestPointer(t *testing.T) {
valid = Validation{RequiredFirst: true}
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Fatal("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
u = User{
ReqEmail: &validEmail,
@@ -564,12 +472,8 @@ func TestPointer(t *testing.T) {
valid = Validation{}
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Fatal("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
}
func TestCanSkipAlso(t *testing.T) {
@@ -589,21 +493,14 @@ func TestCanSkipAlso(t *testing.T) {
valid := Validation{RequiredFirst: true}
b, err := valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if b {
- t.Fatal("validation should not be passed")
- }
+ assert.Nil(t, err)
+ assert.False(t, b)
valid = Validation{RequiredFirst: true}
valid.CanSkipAlso("Range")
b, err = valid.Valid(u)
- if err != nil {
- t.Fatal(err)
- }
- if !b {
- t.Fatal("validation should be passed")
- }
+
+ assert.Nil(t, err)
+ assert.True(t, b)
}
diff --git a/client/cache/cache_test.go b/client/cache/cache_test.go
index c02bba69..db651e94 100644
--- a/client/cache/cache_test.go
+++ b/client/cache/cache_test.go
@@ -18,16 +18,17 @@ import (
"context"
"math"
"os"
+ "strings"
"sync"
"testing"
"time"
+
+ "github.com/stretchr/testify/assert"
)
func TestCacheIncr(t *testing.T) {
bm, err := NewCache("memory", `{"interval":20}`)
- if err != nil {
- t.Error("init err")
- }
+ assert.Nil(t, err)
// timeoutDuration := 10 * time.Second
bm.Put(context.Background(), "edwardhey", 0, time.Second*20)
@@ -48,9 +49,7 @@ func TestCacheIncr(t *testing.T) {
func TestCache(t *testing.T) {
bm, err := NewCache("memory", `{"interval":1}`)
- if err != nil {
- t.Error("init err")
- }
+ assert.Nil(t, err)
timeoutDuration := 5 * time.Second
if err = bm.Put(context.Background(), "astaxie", 1, timeoutDuration); err != nil {
t.Error("set Error", err)
@@ -81,70 +80,48 @@ func TestCache(t *testing.T) {
testDecrOverFlow(t, bm, timeoutDuration)
bm.Delete(context.Background(), "astaxie")
- if res, _ := bm.IsExist(context.Background(), "astaxie"); res {
- t.Error("delete err")
- }
+ res, _ := bm.IsExist(context.Background(), "astaxie")
+ assert.False(t, res)
- // test GetMulti
- if err = bm.Put(context.Background(), "astaxie", "author", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
- if v, _ := bm.Get(context.Background(), "astaxie"); v.(string) != "author" {
- t.Error("get err")
- }
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", "author", timeoutDuration))
- if err = bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie1"); !res {
- t.Error("check err")
- }
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
+
+ v, _ := bm.Get(context.Background(), "astaxie")
+ assert.Equal(t, "author", v)
+
+ assert.Nil(t, bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration))
+
+ res, _ = bm.IsExist(context.Background(), "astaxie1")
+ assert.True(t, res)
vv, _ := bm.GetMulti(context.Background(), []string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
- if vv[0].(string) != "author" {
- t.Error("GetMulti ERROR")
- }
- if vv[1].(string) != "author1" {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+ assert.Equal(t, "author", vv[0])
+ assert.Equal(t,"author1", vv[1])
+
+
vv, err = bm.GetMulti(context.Background(), []string{"astaxie0", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
- if vv[0] != nil {
- t.Error("GetMulti ERROR")
- }
- if vv[1].(string) != "author1" {
- t.Error("GetMulti ERROR")
- }
- if err != nil && err.Error() != "key [astaxie0] error: the key isn't exist" {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+ assert.Nil(t, vv[0])
+ assert.Equal(t, "author1", vv[1])
+
+ assert.NotNil(t, err)
+ assert.True(t, strings.Contains(err.Error(), "key isn't exist"))
}
func TestFileCache(t *testing.T) {
bm, err := NewCache("file", `{"CachePath":"cache","FileSuffix":".bin","DirectoryLevel":"2","EmbedExpiry":"0"}`)
- if err != nil {
- t.Error("init err")
- }
+ assert.Nil(t, err)
timeoutDuration := 10 * time.Second
- if err = bm.Put(context.Background(), "astaxie", 1, timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", 1, timeoutDuration))
- if v, _ := bm.Get(context.Background(), "astaxie"); v.(int) != 1 {
- t.Error("get err")
- }
+ res, _ := bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
+ v, _ := bm.Get(context.Background(), "astaxie")
+ assert.Equal(t, 1, v)
// test different integer type for incr & decr
testMultiTypeIncrDecr(t, bm, timeoutDuration)
@@ -154,54 +131,35 @@ func TestFileCache(t *testing.T) {
testDecrOverFlow(t, bm, timeoutDuration)
bm.Delete(context.Background(), "astaxie")
- if res, _ := bm.IsExist(context.Background(), "astaxie"); res {
- t.Error("delete err")
- }
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.False(t, res)
// test string
- if err = bm.Put(context.Background(), "astaxie", "author", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
- if v, _ := bm.Get(context.Background(), "astaxie"); v.(string) != "author" {
- t.Error("get err")
- }
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", "author", timeoutDuration))
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
+
+ v, _ = bm.Get(context.Background(), "astaxie")
+ assert.Equal(t, "author", v)
// test GetMulti
- if err = bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie1"); !res {
- t.Error("check err")
- }
+ assert.Nil(t, bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration))
+
+ res, _ = bm.IsExist(context.Background(), "astaxie1")
+ assert.True(t, res)
vv, _ := bm.GetMulti(context.Background(), []string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
- if vv[0].(string) != "author" {
- t.Error("GetMulti ERROR")
- }
- if vv[1].(string) != "author1" {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+ assert.Equal(t, "author", vv[0])
+ assert.Equal(t, "author1", vv[1])
vv, err = bm.GetMulti(context.Background(), []string{"astaxie0", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
- if vv[0] != nil {
- t.Error("GetMulti ERROR")
- }
- if vv[1].(string) != "author1" {
- t.Error("GetMulti ERROR")
- }
- if err == nil {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+ assert.Nil(t, vv[0])
+
+ assert.Equal(t, "author1", vv[1])
+ assert.NotNil(t, err)
os.RemoveAll("cache")
}
@@ -215,53 +173,33 @@ func testMultiTypeIncrDecr(t *testing.T, c Cache, timeout time.Duration) {
}
func testIncrDecr(t *testing.T, c Cache, beforeIncr interface{}, afterIncr interface{}, timeout time.Duration) {
- var err error
ctx := context.Background()
key := "incDecKey"
- if err = c.Put(ctx, key, beforeIncr, timeout); err != nil {
- t.Error("Get Error", err)
- }
- if err = c.Incr(ctx, key); err != nil {
- t.Error("Incr Error", err)
- }
+ assert.Nil(t, c.Put(ctx, key, beforeIncr, timeout))
+ assert.Nil(t, c.Incr(ctx, key))
- if v, _ := c.Get(ctx, key); v != afterIncr {
- t.Error("Get Error")
- }
- if err = c.Decr(ctx, key); err != nil {
- t.Error("Decr Error", err)
- }
+ v, _ := c.Get(ctx, key)
+ assert.Equal(t, afterIncr, v)
- if v, _ := c.Get(ctx, key); v != beforeIncr {
- t.Error("Get Error")
- }
+ assert.Nil(t, c.Decr(ctx, key))
- if err := c.Delete(ctx, key); err != nil {
- t.Error("Delete Error")
- }
+ v, _ = c.Get(ctx, key)
+ assert.Equal(t, v, beforeIncr)
+ assert.Nil(t, c.Delete(ctx, key))
}
func testIncrOverFlow(t *testing.T, c Cache, timeout time.Duration) {
- var err error
ctx := context.Background()
key := "incKey"
+ assert.Nil(t, c.Put(ctx, key, int64(math.MaxInt64), timeout))
// int64
- if err = c.Put(ctx, key, int64(math.MaxInt64), timeout); err != nil {
- t.Error("Put Error: ", err.Error())
- return
- }
defer func() {
- if err = c.Delete(ctx, key); err != nil {
- t.Errorf("Delete error: %s", err.Error())
- }
+ assert.Nil(t, c.Delete(ctx, key))
}()
- if err = c.Incr(ctx, key); err == nil {
- t.Error("Incr error")
- return
- }
+ assert.NotNil(t, c.Incr(ctx, key))
}
func testDecrOverFlow(t *testing.T, c Cache, timeout time.Duration) {
diff --git a/client/cache/conv_test.go b/client/cache/conv_test.go
index b90e224a..523150d1 100644
--- a/client/cache/conv_test.go
+++ b/client/cache/conv_test.go
@@ -16,128 +16,74 @@ package cache
import (
"testing"
+
+ "github.com/stretchr/testify/assert"
)
func TestGetString(t *testing.T) {
var t1 = "test1"
- if "test1" != GetString(t1) {
- t.Error("get string from string error")
- }
- var t2 = []byte("test2")
- if "test2" != GetString(t2) {
- t.Error("get string from byte array error")
- }
- var t3 = 1
- if "1" != GetString(t3) {
- t.Error("get string from int error")
- }
- var t4 int64 = 1
- if "1" != GetString(t4) {
- t.Error("get string from int64 error")
- }
- var t5 = 1.1
- if "1.1" != GetString(t5) {
- t.Error("get string from float64 error")
- }
- if "" != GetString(nil) {
- t.Error("get string from nil error")
- }
+ assert.Equal(t, "test1", GetString(t1))
+ var t2 = []byte("test2")
+ assert.Equal(t, "test2", GetString(t2))
+ var t3 = 1
+ assert.Equal(t, "1", GetString(t3))
+ var t4 int64 = 1
+ assert.Equal(t, "1", GetString(t4))
+ var t5 = 1.1
+ assert.Equal(t, "1.1", GetString(t5))
+ assert.Equal(t, "", GetString(nil))
}
func TestGetInt(t *testing.T) {
var t1 = 1
- if 1 != GetInt(t1) {
- t.Error("get int from int error")
- }
+ assert.Equal(t, 1, GetInt(t1))
var t2 int32 = 32
- if 32 != GetInt(t2) {
- t.Error("get int from int32 error")
- }
+ assert.Equal(t, 32, GetInt(t2))
+
var t3 int64 = 64
- if 64 != GetInt(t3) {
- t.Error("get int from int64 error")
- }
+ assert.Equal(t, 64, GetInt(t3))
var t4 = "128"
- if 128 != GetInt(t4) {
- t.Error("get int from num string error")
- }
- if 0 != GetInt(nil) {
- t.Error("get int from nil error")
- }
+
+ assert.Equal(t, 128, GetInt(t4))
+ assert.Equal(t, 0, GetInt(nil))
}
func TestGetInt64(t *testing.T) {
var i int64 = 1
var t1 = 1
- if i != GetInt64(t1) {
- t.Error("get int64 from int error")
- }
+ assert.Equal(t, i, GetInt64(t1))
var t2 int32 = 1
- if i != GetInt64(t2) {
- t.Error("get int64 from int32 error")
- }
+
+ assert.Equal(t, i, GetInt64(t2))
var t3 int64 = 1
- if i != GetInt64(t3) {
- t.Error("get int64 from int64 error")
- }
+ assert.Equal(t, i, GetInt64(t3))
var t4 = "1"
- if i != GetInt64(t4) {
- t.Error("get int64 from num string error")
- }
- if 0 != GetInt64(nil) {
- t.Error("get int64 from nil")
- }
+ assert.Equal(t, i, GetInt64(t4))
+ assert.Equal(t, int64(0), GetInt64(nil))
}
func TestGetFloat64(t *testing.T) {
var f = 1.11
var t1 float32 = 1.11
- if f != GetFloat64(t1) {
- t.Error("get float64 from float32 error")
- }
+ assert.Equal(t, f, GetFloat64(t1))
var t2 = 1.11
- if f != GetFloat64(t2) {
- t.Error("get float64 from float64 error")
- }
+ assert.Equal(t, f, GetFloat64(t2))
var t3 = "1.11"
- if f != GetFloat64(t3) {
- t.Error("get float64 from string error")
- }
+ assert.Equal(t, f, GetFloat64(t3))
var f2 float64 = 1
var t4 = 1
- if f2 != GetFloat64(t4) {
- t.Error("get float64 from int error")
- }
+ assert.Equal(t, f2, GetFloat64(t4))
- if 0 != GetFloat64(nil) {
- t.Error("get float64 from nil error")
- }
+ assert.Equal(t, float64(0), GetFloat64(nil))
}
func TestGetBool(t *testing.T) {
var t1 = true
- if !GetBool(t1) {
- t.Error("get bool from bool error")
- }
+ assert.True(t, GetBool(t1))
var t2 = "true"
- if !GetBool(t2) {
- t.Error("get bool from string error")
- }
- if GetBool(nil) {
- t.Error("get bool from nil error")
- }
-}
+ assert.True(t, GetBool(t2))
-func byteArrayEquals(a []byte, b []byte) bool {
- if len(a) != len(b) {
- return false
- }
- for i, v := range a {
- if v != b[i] {
- return false
- }
- }
- return true
+ assert.False(t, GetBool(nil))
}
diff --git a/client/cache/file_test.go b/client/cache/file_test.go
index 8d7f3451..3ffc27f3 100644
--- a/client/cache/file_test.go
+++ b/client/cache/file_test.go
@@ -42,6 +42,7 @@ func TestFileCacheStartAndGC(t *testing.T) {
str := getTestCacheFilePath()
err = fc.StartAndGC(fmt.Sprintf(`{"CachePath":"%s","FileSuffix":".bin","DirectoryLevel":"2","EmbedExpiry":"0"}`, str))
+ assert.Nil(t, err)
assert.Equal(t, fc.CachePath, str)
assert.Equal(t, fc.DirectoryLevel, 2)
assert.Equal(t, fc.EmbedExpiry, 0)
@@ -65,22 +66,24 @@ func TestFileCacheInit(t *testing.T) {
}
func TestFileGetContents(t *testing.T) {
- data, err := FileGetContents("/bin/aaa")
+ _, err := FileGetContents("/bin/aaa")
assert.NotNil(t, err)
fn := filepath.Join(os.TempDir(), "fileCache.txt")
f, err := os.Create(fn)
assert.Nil(t, err)
_, err = f.WriteString("text")
assert.Nil(t, err)
- data, err = FileGetContents(fn)
+ data, err := FileGetContents(fn)
assert.Nil(t, err)
assert.Equal(t, "text", string(data))
}
func TestGobEncodeDecode(t *testing.T) {
- data, err := GobEncode(func() {})
+ _, err := GobEncode(func() {
+ fmt.Print("test func")
+ })
assert.NotNil(t, err)
- data, err = GobEncode(&FileCacheItem{
+ data, err := GobEncode(&FileCacheItem{
Data: "hello",
})
assert.Nil(t, err)
diff --git a/client/cache/memcache/memcache.go b/client/cache/memcache/memcache.go
index 88a2def0..3816444f 100644
--- a/client/cache/memcache/memcache.go
+++ b/client/cache/memcache/memcache.go
@@ -79,7 +79,7 @@ func (rc *Cache) GetMulti(ctx context.Context, keys []string) ([]interface{}, er
keysErr := make([]string, 0)
for i, ki := range keys {
if _, ok := mv[ki]; !ok {
- keysErr = append(keysErr, fmt.Sprintf("key [%s] error: %s", ki, "the key isn't exist"))
+ keysErr = append(keysErr, fmt.Sprintf("key [%s] error: %s", ki, "key not exist"))
continue
}
rv[i] = mv[ki].Value
@@ -100,7 +100,7 @@ func (rc *Cache) Put(ctx context.Context, key string, val interface{}, timeout t
item.Value = []byte(str)
} else {
return berror.Errorf(cache.InvalidMemCacheValue,
- "the value must be string or byte[]. key: %s, value:%V", key, val)
+ "the value must be string or byte[]. key: %s, value:%v", key, val)
}
return berror.Wrapf(rc.conn.Set(&item), cache.MemCacheCurdFailed,
"could not put key-value to memcache, key: %s", key)
diff --git a/client/cache/memcache/memcache_test.go b/client/cache/memcache/memcache_test.go
index 083e661c..a6c1f19c 100644
--- a/client/cache/memcache/memcache_test.go
+++ b/client/cache/memcache/memcache_test.go
@@ -19,10 +19,12 @@ import (
"fmt"
"os"
"strconv"
+ "strings"
"testing"
"time"
_ "github.com/bradfitz/gomemcache/memcache"
+ "github.com/stretchr/testify/assert"
"github.com/beego/beego/v2/client/cache"
)
@@ -34,78 +36,63 @@ func TestMemcacheCache(t *testing.T) {
}
bm, err := cache.NewCache("memcache", fmt.Sprintf(`{"conn": "%s"}`, addr))
- if err != nil {
- t.Error("init err")
- }
+ assert.Nil(t, err)
+
timeoutDuration := 10 * time.Second
- if err = bm.Put(context.Background(), "astaxie", "1", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
+
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", "1", timeoutDuration))
+ res, _ := bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
time.Sleep(11 * time.Second)
- if res, _ := bm.IsExist(context.Background(), "astaxie"); res {
- t.Error("check err")
- }
- if err = bm.Put(context.Background(), "astaxie", "1", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.False(t, res)
+
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", "1", timeoutDuration))
val, _ := bm.Get(context.Background(), "astaxie")
- if v, err := strconv.Atoi(string(val.([]byte))); err != nil || v != 1 {
- t.Error("get err")
- }
+ v, err := strconv.Atoi(string(val.([]byte)))
+ assert.Nil(t, err)
+ assert.Equal(t, 1, v)
- if err = bm.Incr(context.Background(), "astaxie"); err != nil {
- t.Error("Incr Error", err)
- }
+ assert.Nil(t, bm.Incr(context.Background(), "astaxie"))
val, _ = bm.Get(context.Background(), "astaxie")
- if v, err := strconv.Atoi(string(val.([]byte))); err != nil || v != 2 {
- t.Error("get err")
- }
+ v, err = strconv.Atoi(string(val.([]byte)))
+ assert.Nil(t, err)
+ assert.Equal(t, 2, v)
- if err = bm.Decr(context.Background(), "astaxie"); err != nil {
- t.Error("Decr Error", err)
- }
+ assert.Nil(t, bm.Decr(context.Background(), "astaxie"))
val, _ = bm.Get(context.Background(), "astaxie")
- if v, err := strconv.Atoi(string(val.([]byte))); err != nil || v != 1 {
- t.Error("get err")
- }
+ v, err = strconv.Atoi(string(val.([]byte)))
+ assert.Nil(t, err)
+ assert.Equal(t, 1, v)
bm.Delete(context.Background(), "astaxie")
- if res, _ := bm.IsExist(context.Background(), "astaxie"); res {
- t.Error("delete err")
- }
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.False(t, res)
+
+ assert.Nil(t,bm.Put(context.Background(), "astaxie", "author", timeoutDuration) )
// test string
- if err = bm.Put(context.Background(), "astaxie", "author", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
val, _ = bm.Get(context.Background(), "astaxie")
- if v := val.([]byte); string(v) != "author" {
- t.Error("get err")
- }
+ vs := val.([]byte)
+ assert.Equal(t, "author", string(vs))
// test GetMulti
- if err = bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie1"); !res {
- t.Error("check err")
- }
+ assert.Nil(t, bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration))
+
+
+ res, _ = bm.IsExist(context.Background(), "astaxie1")
+ assert.True(t, res)
vv, _ := bm.GetMulti(context.Background(), []string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+
if string(vv[0].([]byte)) != "author" && string(vv[0].([]byte)) != "author1" {
t.Error("GetMulti ERROR")
}
@@ -114,21 +101,14 @@ func TestMemcacheCache(t *testing.T) {
}
vv, err = bm.GetMulti(context.Background(), []string{"astaxie0", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
- if vv[0] != nil {
- t.Error("GetMulti ERROR")
- }
- if string(vv[1].([]byte)) != "author1" {
- t.Error("GetMulti ERROR")
- }
- if err != nil && err.Error() == "key [astaxie0] error: key isn't exist" {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+ assert.Nil(t, vv[0])
+ assert.Equal(t, "author1", string(vv[1].([]byte)))
+
+ assert.NotNil(t, err)
+ assert.True(t, strings.Contains(err.Error(), "key not exist"))
+
+ assert.Nil(t, bm.ClearAll(context.Background()))
// test clear all
- if err = bm.ClearAll(context.Background()); err != nil {
- t.Error("clear all err")
- }
}
diff --git a/client/cache/redis/redis.go b/client/cache/redis/redis.go
index e97773ba..7e70af2e 100644
--- a/client/cache/redis/redis.go
+++ b/client/cache/redis/redis.go
@@ -207,7 +207,7 @@ func (rc *Cache) StartAndGC(config string) error {
cf["key"] = DefaultKey
}
if _, ok := cf["conn"]; !ok {
- return berror.Wrapf(err, cache.InvalidRedisCacheCfg, "config missing conn field. ", config)
+ return berror.Wrapf(err, cache.InvalidRedisCacheCfg, "config missing conn field: %s", config)
}
// Format redis://@:
diff --git a/client/cache/redis/redis_test.go b/client/cache/redis/redis_test.go
index 3344bc34..3e794514 100644
--- a/client/cache/redis/redis_test.go
+++ b/client/cache/redis/redis_test.go
@@ -35,96 +35,74 @@ func TestRedisCache(t *testing.T) {
}
bm, err := cache.NewCache("redis", fmt.Sprintf(`{"conn": "%s"}`, redisAddr))
- if err != nil {
- t.Error("init err")
- }
- timeoutDuration := 10 * time.Second
- if err = bm.Put(context.Background(), "astaxie", 1, timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
+ assert.Nil(t, err)
+ timeoutDuration := 3 * time.Second
- time.Sleep(11 * time.Second)
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", 1, timeoutDuration))
+
+
+ res, _ := bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
+
+ time.Sleep(5 * time.Second)
+
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.False(t, res)
+
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", 1, timeoutDuration))
- if res, _ := bm.IsExist(context.Background(), "astaxie"); res {
- t.Error("check err")
- }
- if err = bm.Put(context.Background(), "astaxie", 1, timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
val, _ := bm.Get(context.Background(), "astaxie")
- if v, _ := redis.Int(val, err); v != 1 {
- t.Error("get err")
- }
+ v, _ := redis.Int(val, err)
+ assert.Equal(t, 1, v)
- if err = bm.Incr(context.Background(), "astaxie"); err != nil {
- t.Error("Incr Error", err)
- }
+ assert.Nil(t, bm.Incr(context.Background(), "astaxie"))
val, _ = bm.Get(context.Background(), "astaxie")
- if v, _ := redis.Int(val, err); v != 2 {
- t.Error("get err")
- }
+ v, _ = redis.Int(val, err)
+ assert.Equal(t, 2, v)
- if err = bm.Decr(context.Background(), "astaxie"); err != nil {
- t.Error("Decr Error", err)
- }
+ assert.Nil(t, bm.Decr(context.Background(), "astaxie"))
val, _ = bm.Get(context.Background(), "astaxie")
- if v, _ := redis.Int(val, err); v != 1 {
- t.Error("get err")
- }
+ v, _ = redis.Int(val, err)
+ assert.Equal(t, 1, v)
bm.Delete(context.Background(), "astaxie")
- if res, _ := bm.IsExist(context.Background(), "astaxie"); res {
- t.Error("delete err")
- }
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.False(t, res)
+
+ assert.Nil(t, bm.Put(context.Background(), "astaxie", "author", timeoutDuration))
// test string
- if err = bm.Put(context.Background(), "astaxie", "author", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie"); !res {
- t.Error("check err")
- }
+
+ res, _ = bm.IsExist(context.Background(), "astaxie")
+ assert.True(t, res)
val, _ = bm.Get(context.Background(), "astaxie")
- if v, _ := redis.String(val, err); v != "author" {
- t.Error("get err")
- }
+ vs, _ := redis.String(val, err)
+ assert.Equal(t, "author", vs)
// test GetMulti
- if err = bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := bm.IsExist(context.Background(), "astaxie1"); !res {
- t.Error("check err")
- }
+ assert.Nil(t, bm.Put(context.Background(), "astaxie1", "author1", timeoutDuration))
+
+ res, _ = bm.IsExist(context.Background(), "astaxie1")
+ assert.True(t, res)
vv, _ := bm.GetMulti(context.Background(), []string{"astaxie", "astaxie1"})
- if len(vv) != 2 {
- t.Error("GetMulti ERROR")
- }
- if v, _ := redis.String(vv[0], nil); v != "author" {
- t.Error("GetMulti ERROR")
- }
- if v, _ := redis.String(vv[1], nil); v != "author1" {
- t.Error("GetMulti ERROR")
- }
+ assert.Equal(t, 2, len(vv))
+ vs, _ = redis.String(vv[0], nil)
+ assert.Equal(t, "author", vs)
+
+ vs, _ = redis.String(vv[1], nil)
+ assert.Equal(t, "author1", vs)
vv, _ = bm.GetMulti(context.Background(), []string{"astaxie0", "astaxie1"})
- if vv[0] != nil {
- t.Error("GetMulti ERROR")
- }
- if v, _ := redis.String(vv[1], nil); v != "author1" {
- t.Error("GetMulti ERROR")
- }
+ assert.Nil(t, vv[0])
+
+ vs, _ = redis.String(vv[1], nil)
+ assert.Equal(t, "author1", vs)
// test clear all
- if err = bm.ClearAll(context.Background()); err != nil {
- t.Error("clear all err")
- }
+ assert.Nil(t, bm.ClearAll(context.Background()))
}
func TestCache_Scan(t *testing.T) {
@@ -137,35 +115,24 @@ func TestCache_Scan(t *testing.T) {
// init
bm, err := cache.NewCache("redis", fmt.Sprintf(`{"conn": "%s"}`, addr))
- if err != nil {
- t.Error("init err")
- }
+
+ assert.Nil(t, err)
// insert all
for i := 0; i < 100; i++ {
- if err = bm.Put(context.Background(), fmt.Sprintf("astaxie%d", i), fmt.Sprintf("author%d", i), timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
+ assert.Nil(t, bm.Put(context.Background(), fmt.Sprintf("astaxie%d", i), fmt.Sprintf("author%d", i), timeoutDuration))
}
time.Sleep(time.Second)
// scan all for the first time
keys, err := bm.(*Cache).Scan(DefaultKey + ":*")
- if err != nil {
- t.Error("scan Error", err)
- }
+ assert.Nil(t, err)
assert.Equal(t, 100, len(keys), "scan all error")
// clear all
- if err = bm.ClearAll(context.Background()); err != nil {
- t.Error("clear all err")
- }
+ assert.Nil(t, bm.ClearAll(context.Background()))
// scan all for the second time
keys, err = bm.(*Cache).Scan(DefaultKey + ":*")
- if err != nil {
- t.Error("scan Error", err)
- }
- if len(keys) != 0 {
- t.Error("scan all err")
- }
+ assert.Nil(t, err)
+ assert.Equal(t, 0, len(keys))
}
diff --git a/client/cache/ssdb/ssdb.go b/client/cache/ssdb/ssdb.go
index 7cb3a38e..e715d07f 100644
--- a/client/cache/ssdb/ssdb.go
+++ b/client/cache/ssdb/ssdb.go
@@ -53,7 +53,7 @@ func (rc *Cache) GetMulti(ctx context.Context, keys []string) ([]interface{}, er
keysErr := make([]string, 0)
for i, ki := range keys {
if _, ok := keyIdx[ki]; !ok {
- keysErr = append(keysErr, fmt.Sprintf("key [%s] error: %s", ki, "the key isn't exist"))
+ keysErr = append(keysErr, fmt.Sprintf("key [%s] error: %s", ki, "key not exist"))
continue
}
values[i] = res[keyIdx[ki]+1]
diff --git a/client/cache/ssdb/ssdb_test.go b/client/cache/ssdb/ssdb_test.go
index 8ac1efd6..fea755f4 100644
--- a/client/cache/ssdb/ssdb_test.go
+++ b/client/cache/ssdb/ssdb_test.go
@@ -5,9 +5,12 @@ import (
"fmt"
"os"
"strconv"
+ "strings"
"testing"
"time"
+ "github.com/stretchr/testify/assert"
+
"github.com/beego/beego/v2/client/cache"
)
@@ -19,114 +22,80 @@ func TestSsdbcacheCache(t *testing.T) {
}
ssdb, err := cache.NewCache("ssdb", fmt.Sprintf(`{"conn": "%s"}`, ssdbAddr))
- if err != nil {
- t.Error("init err")
- }
+ assert.Nil(t, err)
// test put and exist
- if res, _ := ssdb.IsExist(context.Background(), "ssdb"); res {
- t.Error("check err")
- }
- timeoutDuration := 10 * time.Second
+ res, _ := ssdb.IsExist(context.Background(), "ssdb")
+ assert.False(t, res)
+ timeoutDuration := 3 * time.Second
// timeoutDuration := -10*time.Second if timeoutDuration is negtive,it means permanent
- if err = ssdb.Put(context.Background(), "ssdb", "ssdb", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := ssdb.IsExist(context.Background(), "ssdb"); !res {
- t.Error("check err")
- }
+
+ assert.Nil(t, ssdb.Put(context.Background(), "ssdb", "ssdb", timeoutDuration))
+
+ res, _ = ssdb.IsExist(context.Background(), "ssdb")
+ assert.True(t, res)
// Get test done
- if err = ssdb.Put(context.Background(), "ssdb", "ssdb", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
+ assert.Nil(t, ssdb.Put(context.Background(), "ssdb", "ssdb", timeoutDuration))
- if v, _ := ssdb.Get(context.Background(), "ssdb"); v != "ssdb" {
- t.Error("get Error")
- }
+ v, _ := ssdb.Get(context.Background(), "ssdb")
+ assert.Equal(t, "ssdb", v)
// inc/dec test done
- if err = ssdb.Put(context.Background(), "ssdb", "2", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
- if err = ssdb.Incr(context.Background(), "ssdb"); err != nil {
- t.Error("incr Error", err)
- }
+ assert.Nil(t, ssdb.Put(context.Background(), "ssdb", "2", timeoutDuration))
+
+ assert.Nil(t, ssdb.Incr(context.Background(), "ssdb"))
val, _ := ssdb.Get(context.Background(), "ssdb")
- if v, err := strconv.Atoi(val.(string)); err != nil || v != 3 {
- t.Error("get err")
- }
+ v, err = strconv.Atoi(val.(string))
+ assert.Nil(t, err)
+ assert.Equal(t, 3, v)
- if err = ssdb.Decr(context.Background(), "ssdb"); err != nil {
- t.Error("decr error")
- }
+ assert.Nil(t, ssdb.Decr(context.Background(), "ssdb"))
// test del
- if err = ssdb.Put(context.Background(), "ssdb", "3", timeoutDuration); err != nil {
- t.Error("set Error", err)
- }
+ assert.Nil(t, ssdb.Put(context.Background(), "ssdb", "3", timeoutDuration))
val, _ = ssdb.Get(context.Background(), "ssdb")
- if v, err := strconv.Atoi(val.(string)); err != nil || v != 3 {
- t.Error("get err")
- }
- if err := ssdb.Delete(context.Background(), "ssdb"); err == nil {
- if e, _ := ssdb.IsExist(context.Background(), "ssdb"); e {
- t.Error("delete err")
- }
- }
+ v, err = strconv.Atoi(val.(string))
+ assert.Equal(t, 3, v)
+ assert.Nil(t, err)
+ assert.Nil(t, ssdb.Delete(context.Background(), "ssdb"))
+ assert.Nil(t, ssdb.Put(context.Background(), "ssdb", "ssdb", -10*time.Second))
// test string
- if err = ssdb.Put(context.Background(), "ssdb", "ssdb", -10*time.Second); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := ssdb.IsExist(context.Background(), "ssdb"); !res {
- t.Error("check err")
- }
- if v, _ := ssdb.Get(context.Background(), "ssdb"); v.(string) != "ssdb" {
- t.Error("get err")
- }
+
+ res, _ = ssdb.IsExist(context.Background(), "ssdb")
+ assert.True(t, res)
+
+ v, _ = ssdb.Get(context.Background(), "ssdb")
+ assert.Equal(t, "ssdb", v.(string))
// test GetMulti done
- if err = ssdb.Put(context.Background(), "ssdb1", "ssdb1", -10*time.Second); err != nil {
- t.Error("set Error", err)
- }
- if res, _ := ssdb.IsExist(context.Background(), "ssdb1"); !res {
- t.Error("check err")
- }
+ assert.Nil(t, ssdb.Put(context.Background(), "ssdb1", "ssdb1", -10*time.Second))
+
+ res, _ = ssdb.IsExist(context.Background(), "ssdb1")
+ assert.True(t, res)
vv, _ := ssdb.GetMulti(context.Background(), []string{"ssdb", "ssdb1"})
- if len(vv) != 2 {
- t.Error("getmulti error")
- }
- if vv[0].(string) != "ssdb" {
- t.Error("getmulti error")
- }
- if vv[1].(string) != "ssdb1" {
- t.Error("getmulti error")
- }
+ assert.Equal(t, 2, len(vv))
+
+ assert.Equal(t, "ssdb", vv[0])
+ assert.Equal(t, "ssdb1", vv[1])
vv, err = ssdb.GetMulti(context.Background(), []string{"ssdb", "ssdb11"})
- if len(vv) != 2 {
- t.Error("getmulti error")
- }
- if vv[0].(string) != "ssdb" {
- t.Error("getmulti error")
- }
- if vv[1] != nil {
- t.Error("getmulti error")
- }
- if err != nil && err.Error() != "key [ssdb11] error: the key isn't exist" {
- t.Error("getmulti error")
- }
+
+ assert.Equal(t, 2, len(vv))
+
+ assert.Equal(t, "ssdb", vv[0])
+ assert.Nil(t, vv[1])
+
+ assert.NotNil(t, err)
+ assert.True(t, strings.Contains(err.Error(), "key not exist"))
// test clear all done
- if err = ssdb.ClearAll(context.Background()); err != nil {
- t.Error("clear all err")
- }
+ assert.Nil(t, ssdb.ClearAll(context.Background()))
e1, _ := ssdb.IsExist(context.Background(), "ssdb")
e2, _ := ssdb.IsExist(context.Background(), "ssdb1")
- if e1 || e2 {
- t.Error("check err")
- }
+ assert.False(t, e1)
+ assert.False(t, e2)
}
diff --git a/client/httplib/filter/opentracing/filter_test.go b/client/httplib/filter/opentracing/filter_test.go
index e1ae48c5..a9b9cbb0 100644
--- a/client/httplib/filter/opentracing/filter_test.go
+++ b/client/httplib/filter/opentracing/filter_test.go
@@ -26,7 +26,7 @@ import (
"github.com/beego/beego/v2/client/httplib"
)
-func TestFilterChainBuilder_FilterChain(t *testing.T) {
+func TestFilterChainBuilderFilterChain(t *testing.T) {
next := func(ctx context.Context, req *httplib.BeegoHTTPRequest) (*http.Response, error) {
time.Sleep(100 * time.Millisecond)
return &http.Response{
diff --git a/client/httplib/filter/prometheus/filter_test.go b/client/httplib/filter/prometheus/filter_test.go
index 1e7935d0..4a7b29f2 100644
--- a/client/httplib/filter/prometheus/filter_test.go
+++ b/client/httplib/filter/prometheus/filter_test.go
@@ -25,7 +25,7 @@ import (
"github.com/beego/beego/v2/client/httplib"
)
-func TestFilterChainBuilder_FilterChain(t *testing.T) {
+func TestFilterChainBuilderFilterChain(t *testing.T) {
next := func(ctx context.Context, req *httplib.BeegoHTTPRequest) (*http.Response, error) {
time.Sleep(100 * time.Millisecond)
return &http.Response{
diff --git a/client/httplib/httplib.go b/client/httplib/httplib.go
index b50b2aca..cef2294c 100644
--- a/client/httplib/httplib.go
+++ b/client/httplib/httplib.go
@@ -55,6 +55,7 @@ import (
"github.com/beego/beego/v2/core/logs"
)
+const contentTypeKey = "Content-Type"
// it will be the last filter and execute request.Do
var doRequestFilter = func(ctx context.Context, req *BeegoHTTPRequest) (*http.Response, error) {
return req.doRequest(ctx)
@@ -311,7 +312,7 @@ func (b *BeegoHTTPRequest) XMLBody(obj interface{}) (*BeegoHTTPRequest, error) {
return ioutil.NopCloser(bytes.NewReader(byts)), nil
}
b.req.ContentLength = int64(len(byts))
- b.req.Header.Set("Content-Type", "application/xml")
+ b.req.Header.Set(contentTypeKey, "application/xml")
}
return b, nil
}
@@ -325,7 +326,7 @@ func (b *BeegoHTTPRequest) YAMLBody(obj interface{}) (*BeegoHTTPRequest, error)
}
b.req.Body = ioutil.NopCloser(bytes.NewReader(byts))
b.req.ContentLength = int64(len(byts))
- b.req.Header.Set("Content-Type", "application/x+yaml")
+ b.req.Header.Set(contentTypeKey, "application/x+yaml")
}
return b, nil
}
@@ -339,7 +340,7 @@ func (b *BeegoHTTPRequest) JSONBody(obj interface{}) (*BeegoHTTPRequest, error)
}
b.req.Body = ioutil.NopCloser(bytes.NewReader(byts))
b.req.ContentLength = int64(len(byts))
- b.req.Header.Set("Content-Type", "application/json")
+ b.req.Header.Set(contentTypeKey, "application/json")
}
return b, nil
}
@@ -359,34 +360,38 @@ func (b *BeegoHTTPRequest) buildURL(paramBody string) {
if (b.req.Method == "POST" || b.req.Method == "PUT" || b.req.Method == "PATCH" || b.req.Method == "DELETE") && b.req.Body == nil {
// with files
if len(b.files) > 0 {
- pr, pw := io.Pipe()
- bodyWriter := multipart.NewWriter(pw)
- go func() {
- for formname, filename := range b.files {
- b.handleFileToBody(bodyWriter, formname, filename)
- }
- for k, v := range b.params {
- for _, vv := range v {
- _ = bodyWriter.WriteField(k, vv)
- }
- }
- _ = bodyWriter.Close()
- _ = pw.Close()
- }()
- b.Header("Content-Type", bodyWriter.FormDataContentType())
- b.req.Body = ioutil.NopCloser(pr)
- b.Header("Transfer-Encoding", "chunked")
+ b.handleFiles()
return
}
// with params
if len(paramBody) > 0 {
- b.Header("Content-Type", "application/x-www-form-urlencoded")
+ b.Header(contentTypeKey, "application/x-www-form-urlencoded")
b.Body(paramBody)
}
}
}
+func (b *BeegoHTTPRequest) handleFiles() {
+ pr, pw := io.Pipe()
+ bodyWriter := multipart.NewWriter(pw)
+ go func() {
+ for formname, filename := range b.files {
+ b.handleFileToBody(bodyWriter, formname, filename)
+ }
+ for k, v := range b.params {
+ for _, vv := range v {
+ _ = bodyWriter.WriteField(k, vv)
+ }
+ }
+ _ = bodyWriter.Close()
+ _ = pw.Close()
+ }()
+ b.Header(contentTypeKey, bodyWriter.FormDataContentType())
+ b.req.Body = ioutil.NopCloser(pr)
+ b.Header("Transfer-Encoding", "chunked")
+}
+
func (b *BeegoHTTPRequest) handleFileToBody(bodyWriter *multipart.Writer, formname string, filename string) {
fileWriter, err := bodyWriter.CreateFormFile(formname, filename)
const errFmt = "Httplib: %+v"
diff --git a/core/logs/log_msg.go b/core/logs/log_msg.go
index f96fa72f..f1a0b559 100644
--- a/core/logs/log_msg.go
+++ b/core/logs/log_msg.go
@@ -37,7 +37,7 @@ func (lm *LogMsg) OldStyleFormat() string {
msg := lm.Msg
if len(lm.Args) > 0 {
- lm.Msg = fmt.Sprintf(lm.Msg, lm.Args...)
+ msg = fmt.Sprintf(lm.Msg, lm.Args...)
}
msg = lm.Prefix + " " + msg
diff --git a/core/logs/log_msg_test.go b/core/logs/log_msg_test.go
index f213ed42..dcc7e7d4 100644
--- a/core/logs/log_msg_test.go
+++ b/core/logs/log_msg_test.go
@@ -41,4 +41,8 @@ func TestLogMsg_OldStyleFormat(t *testing.T) {
res = lg.OldStyleFormat()
assert.Equal(t, "[D] [/user/home/main.go:13] Cus Hello, world", res)
+
+ lg.Msg = "hello, %s"
+ lg.Args = []interface{}{"world"}
+ assert.Equal(t, "[D] [/user/home/main.go:13] Cus hello, world", lg.OldStyleFormat())
}
diff --git a/core/logs/log_test.go b/core/logs/log_test.go
index 66f59108..d7728c76 100644
--- a/core/logs/log_test.go
+++ b/core/logs/log_test.go
@@ -18,9 +18,10 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+
)
-func TestBeeLogger_DelLogger(t *testing.T) {
+func TestBeeLoggerDelLogger(t *testing.T) {
prefix := "My-Cus"
l := GetLogger(prefix)
assert.NotNil(t, l)
diff --git a/server/web/beego.go b/server/web/beego.go
index 14e51a94..17a7ea7b 100644
--- a/server/web/beego.go
+++ b/server/web/beego.go
@@ -75,7 +75,7 @@ func initBeforeHTTPRun() {
registerTemplate,
registerAdmin,
registerGzip,
- registerCommentRouter,
+ // registerCommentRouter,
)
for _, hk := range hooks {
diff --git a/server/web/hooks.go b/server/web/hooks.go
index f91bec1e..0f72e711 100644
--- a/server/web/hooks.go
+++ b/server/web/hooks.go
@@ -6,8 +6,6 @@ import (
"net/http"
"path/filepath"
- "github.com/coreos/etcd/pkg/fileutil"
-
"github.com/beego/beego/v2/core/logs"
"github.com/beego/beego/v2/server/web/context"
"github.com/beego/beego/v2/server/web/session"
@@ -98,18 +96,3 @@ func registerGzip() error {
}
return nil
}
-
-func registerCommentRouter() error {
- if BConfig.RunMode == DEV {
- ctrlDir := filepath.Join(WorkPath, BConfig.WebConfig.CommentRouterPath)
- if !fileutil.Exist(ctrlDir) {
- logs.Warn("controller package not found, won't generate router: ", ctrlDir)
- return nil
- }
- if err := parserPkg(ctrlDir); err != nil {
- return err
- }
- }
-
- return nil
-}
diff --git a/server/web/parser.go b/server/web/parser.go
deleted file mode 100644
index b3a8b42b..00000000
--- a/server/web/parser.go
+++ /dev/null
@@ -1,589 +0,0 @@
-// Copyright 2014 beego Author. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package web
-
-import (
- "encoding/json"
- "errors"
- "fmt"
- "go/ast"
- "io/ioutil"
- "os"
- "path/filepath"
- "regexp"
- "sort"
- "strconv"
- "strings"
- "unicode"
-
- "golang.org/x/tools/go/packages"
-
- "github.com/beego/beego/v2/core/logs"
-
- "github.com/beego/beego/v2/core/utils"
- "github.com/beego/beego/v2/server/web/context/param"
-)
-
-var globalRouterTemplate = `package {{.routersDir}}
-
-import (
- beego "github.com/beego/beego/v2/server/web"
- "github.com/beego/beego/v2/server/web/context/param"{{.globalimport}}
-)
-
-func init() {
-{{.globalinfo}}
-}
-`
-
-var (
- lastupdateFilename = "lastupdate.tmp"
- pkgLastupdate map[string]int64
- genInfoList map[string][]ControllerComments
-
- routerHooks = map[string]int{
- "beego.BeforeStatic": BeforeStatic,
- "beego.BeforeRouter": BeforeRouter,
- "beego.BeforeExec": BeforeExec,
- "beego.AfterExec": AfterExec,
- "beego.FinishRouter": FinishRouter,
- }
-
- routerHooksMapping = map[int]string{
- BeforeStatic: "beego.BeforeStatic",
- BeforeRouter: "beego.BeforeRouter",
- BeforeExec: "beego.BeforeExec",
- AfterExec: "beego.AfterExec",
- FinishRouter: "beego.FinishRouter",
- }
-)
-
-const commentFilename = "commentsRouter.go"
-
-func init() {
- pkgLastupdate = make(map[string]int64)
-}
-
-func parserPkg(pkgRealpath string) error {
- if !compareFile(pkgRealpath) {
- logs.Info(pkgRealpath + " no changed")
- return nil
- }
- genInfoList = make(map[string][]ControllerComments)
- pkgs, err := packages.Load(&packages.Config{
- Mode: packages.NeedName | packages.NeedFiles | packages.NeedCompiledGoFiles | packages.NeedSyntax,
- Dir: pkgRealpath,
- }, "./...")
-
- if err != nil {
- return err
- }
- for _, pkg := range pkgs {
- for _, fl := range pkg.Syntax {
- for _, d := range fl.Decls {
- switch specDecl := d.(type) {
- case *ast.FuncDecl:
- if specDecl.Recv != nil {
- exp, ok := specDecl.Recv.List[0].Type.(*ast.StarExpr) // Check that the type is correct first beforing throwing to parser
- if ok {
- err = parserComments(specDecl, fmt.Sprint(exp.X), pkg.PkgPath)
- if err != nil {
- return err
- }
- }
- }
- }
- }
- }
- }
- genRouterCode(pkgRealpath)
- savetoFile(pkgRealpath)
- return nil
-}
-
-type parsedComment struct {
- routerPath string
- methods []string
- params map[string]parsedParam
- filters []parsedFilter
- imports []parsedImport
-}
-
-type parsedImport struct {
- importPath string
- importAlias string
-}
-
-type parsedFilter struct {
- pattern string
- pos int
- filter string
- params []bool
-}
-
-type parsedParam struct {
- name string
- datatype string
- location string
- defValue string
- required bool
-}
-
-func parserComments(f *ast.FuncDecl, controllerName, pkgpath string) error {
- if f.Doc != nil {
- parsedComments, err := parseComment(f.Doc.List)
- if err != nil {
- return err
- }
- for _, parsedComment := range parsedComments {
- if parsedComment.routerPath != "" {
- key := pkgpath + ":" + controllerName
- cc := ControllerComments{}
- cc.Method = f.Name.String()
- cc.Router = parsedComment.routerPath
- cc.AllowHTTPMethods = parsedComment.methods
- cc.MethodParams = buildMethodParams(f.Type.Params.List, parsedComment)
- cc.FilterComments = buildFilters(parsedComment.filters)
- cc.ImportComments = buildImports(parsedComment.imports)
- genInfoList[key] = append(genInfoList[key], cc)
- }
- }
- }
- return nil
-}
-
-func buildImports(pis []parsedImport) []*ControllerImportComments {
- var importComments []*ControllerImportComments
-
- for _, pi := range pis {
- importComments = append(importComments, &ControllerImportComments{
- ImportPath: pi.importPath,
- ImportAlias: pi.importAlias,
- })
- }
-
- return importComments
-}
-
-func buildFilters(pfs []parsedFilter) []*ControllerFilterComments {
- var filterComments []*ControllerFilterComments
-
- for _, pf := range pfs {
- var (
- returnOnOutput bool
- resetParams bool
- )
-
- if len(pf.params) >= 1 {
- returnOnOutput = pf.params[0]
- }
-
- if len(pf.params) >= 2 {
- resetParams = pf.params[1]
- }
-
- filterComments = append(filterComments, &ControllerFilterComments{
- Filter: pf.filter,
- Pattern: pf.pattern,
- Pos: pf.pos,
- ReturnOnOutput: returnOnOutput,
- ResetParams: resetParams,
- })
- }
-
- return filterComments
-}
-
-func buildMethodParams(funcParams []*ast.Field, pc *parsedComment) []*param.MethodParam {
- result := make([]*param.MethodParam, 0, len(funcParams))
- for _, fparam := range funcParams {
- for _, pName := range fparam.Names {
- methodParam := buildMethodParam(fparam, pName.Name, pc)
- result = append(result, methodParam)
- }
- }
- return result
-}
-
-func buildMethodParam(fparam *ast.Field, name string, pc *parsedComment) *param.MethodParam {
- options := []param.MethodParamOption{}
- if cparam, ok := pc.params[name]; ok {
- // Build param from comment info
- name = cparam.name
- if cparam.required {
- options = append(options, param.IsRequired)
- }
- switch cparam.location {
- case "body":
- options = append(options, param.InBody)
- case "header":
- options = append(options, param.InHeader)
- case "path":
- options = append(options, param.InPath)
- }
- if cparam.defValue != "" {
- options = append(options, param.Default(cparam.defValue))
- }
- } else {
- if paramInPath(name, pc.routerPath) {
- options = append(options, param.InPath)
- }
- }
- return param.New(name, options...)
-}
-
-func paramInPath(name, route string) bool {
- return strings.HasSuffix(route, ":"+name) ||
- strings.Contains(route, ":"+name+"/")
-}
-
-var routeRegex = regexp.MustCompile(`@router\s+(\S+)(?:\s+\[(\S+)\])?`)
-
-func parseComment(lines []*ast.Comment) (pcs []*parsedComment, err error) {
- pcs = []*parsedComment{}
- params := map[string]parsedParam{}
- filters := []parsedFilter{}
- imports := []parsedImport{}
-
- for _, c := range lines {
- t := strings.TrimSpace(strings.TrimLeft(c.Text, "//"))
- if strings.HasPrefix(t, "@Param") {
- pv := getparams(strings.TrimSpace(strings.TrimLeft(t, "@Param")))
- if len(pv) < 4 {
- logs.Error("Invalid @Param format. Needs at least 4 parameters")
- }
- p := parsedParam{}
- names := strings.SplitN(pv[0], "=>", 2)
- p.name = names[0]
- funcParamName := p.name
- if len(names) > 1 {
- funcParamName = names[1]
- }
- p.location = pv[1]
- p.datatype = pv[2]
- switch len(pv) {
- case 5:
- p.required, _ = strconv.ParseBool(pv[3])
- case 6:
- p.defValue = pv[3]
- p.required, _ = strconv.ParseBool(pv[4])
- }
- params[funcParamName] = p
- }
- }
-
- for _, c := range lines {
- t := strings.TrimSpace(strings.TrimLeft(c.Text, "//"))
- if strings.HasPrefix(t, "@Import") {
- iv := getparams(strings.TrimSpace(strings.TrimLeft(t, "@Import")))
- if len(iv) == 0 || len(iv) > 2 {
- logs.Error("Invalid @Import format. Only accepts 1 or 2 parameters")
- continue
- }
-
- p := parsedImport{}
- p.importPath = iv[0]
-
- if len(iv) == 2 {
- p.importAlias = iv[1]
- }
-
- imports = append(imports, p)
- }
- }
-
-filterLoop:
- for _, c := range lines {
- t := strings.TrimSpace(strings.TrimLeft(c.Text, "//"))
- if strings.HasPrefix(t, "@Filter") {
- fv := getparams(strings.TrimSpace(strings.TrimLeft(t, "@Filter")))
- if len(fv) < 3 {
- logs.Error("Invalid @Filter format. Needs at least 3 parameters")
- continue filterLoop
- }
-
- p := parsedFilter{}
- p.pattern = fv[0]
- posName := fv[1]
- if pos, exists := routerHooks[posName]; exists {
- p.pos = pos
- } else {
- logs.Error("Invalid @Filter pos: ", posName)
- continue filterLoop
- }
-
- p.filter = fv[2]
- fvParams := fv[3:]
- for _, fvParam := range fvParams {
- switch fvParam {
- case "true":
- p.params = append(p.params, true)
- case "false":
- p.params = append(p.params, false)
- default:
- logs.Error("Invalid @Filter param: ", fvParam)
- continue filterLoop
- }
- }
-
- filters = append(filters, p)
- }
- }
-
- for _, c := range lines {
- var pc = &parsedComment{}
- pc.params = params
- pc.filters = filters
- pc.imports = imports
-
- t := strings.TrimSpace(strings.TrimLeft(c.Text, "//"))
- if strings.HasPrefix(t, "@router") {
- t := strings.TrimSpace(strings.TrimLeft(c.Text, "//"))
- matches := routeRegex.FindStringSubmatch(t)
- if len(matches) == 3 {
- pc.routerPath = matches[1]
- methods := matches[2]
- if methods == "" {
- pc.methods = []string{"get"}
- // pc.hasGet = true
- } else {
- pc.methods = strings.Split(methods, ",")
- // pc.hasGet = strings.Contains(methods, "get")
- }
- pcs = append(pcs, pc)
- } else {
- return nil, errors.New("Router information is missing")
- }
- }
- }
- return
-}
-
-// direct copy from bee\g_docs.go
-// analysis params return []string
-// @Param query form string true "The email for login"
-// [query form string true "The email for login"]
-func getparams(str string) []string {
- var s []rune
- var j int
- var start bool
- var r []string
- var quoted int8
- for _, c := range str {
- if unicode.IsSpace(c) && quoted == 0 {
- if !start {
- continue
- } else {
- start = false
- j++
- r = append(r, string(s))
- s = make([]rune, 0)
- continue
- }
- }
-
- start = true
- if c == '"' {
- quoted ^= 1
- continue
- }
- s = append(s, c)
- }
- if len(s) > 0 {
- r = append(r, string(s))
- }
- return r
-}
-
-func genRouterCode(pkgRealpath string) {
- os.Mkdir(getRouterDir(pkgRealpath), 0755)
- logs.Info("generate router from comments")
- var (
- globalinfo string
- globalimport string
- sortKey []string
- )
- for k := range genInfoList {
- sortKey = append(sortKey, k)
- }
- sort.Strings(sortKey)
- for _, k := range sortKey {
- cList := genInfoList[k]
- sort.Sort(ControllerCommentsSlice(cList))
- for _, c := range cList {
- allmethod := "nil"
- if len(c.AllowHTTPMethods) > 0 {
- allmethod = "[]string{"
- for _, m := range c.AllowHTTPMethods {
- allmethod += `"` + m + `",`
- }
- allmethod = strings.TrimRight(allmethod, ",") + "}"
- }
-
- params := "nil"
- if len(c.Params) > 0 {
- params = "[]map[string]string{"
- for _, p := range c.Params {
- for k, v := range p {
- params = params + `map[string]string{` + k + `:"` + v + `"},`
- }
- }
- params = strings.TrimRight(params, ",") + "}"
- }
-
- methodParams := "param.Make("
- if len(c.MethodParams) > 0 {
- lines := make([]string, 0, len(c.MethodParams))
- for _, m := range c.MethodParams {
- lines = append(lines, fmt.Sprint(m))
- }
- methodParams += "\n " +
- strings.Join(lines, ",\n ") +
- ",\n "
- }
- methodParams += ")"
-
- imports := ""
- if len(c.ImportComments) > 0 {
- for _, i := range c.ImportComments {
- var s string
- if i.ImportAlias != "" {
- s = fmt.Sprintf(`
- %s "%s"`, i.ImportAlias, i.ImportPath)
- } else {
- s = fmt.Sprintf(`
- "%s"`, i.ImportPath)
- }
- if !strings.Contains(globalimport, s) {
- imports += s
- }
- }
- }
-
- filters := ""
- if len(c.FilterComments) > 0 {
- for _, f := range c.FilterComments {
- filters += fmt.Sprintf(` &beego.ControllerFilter{
- Pattern: "%s",
- Pos: %s,
- Filter: %s,
- ReturnOnOutput: %v,
- ResetParams: %v,
- },`, f.Pattern, routerHooksMapping[f.Pos], f.Filter, f.ReturnOnOutput, f.ResetParams)
- }
- }
-
- if filters == "" {
- filters = "nil"
- } else {
- filters = fmt.Sprintf(`[]*beego.ControllerFilter{
-%s
- }`, filters)
- }
-
- globalimport += imports
-
- globalinfo = globalinfo + `
- beego.GlobalControllerRouter["` + k + `"] = append(beego.GlobalControllerRouter["` + k + `"],
- beego.ControllerComments{
- Method: "` + strings.TrimSpace(c.Method) + `",
-
- ` + "Router: `" + c.Router + "`" + `,
- AllowHTTPMethods: ` + allmethod + `,
- MethodParams: ` + methodParams + `,
- Filters: ` + filters + `,
- Params: ` + params + `})
-`
- }
- }
-
- if globalinfo != "" {
- f, err := os.Create(filepath.Join(getRouterDir(pkgRealpath), commentFilename))
- if err != nil {
- panic(err)
- }
- defer f.Close()
-
- routersDir := AppConfig.DefaultString("routersdir", "routers")
- content := strings.Replace(globalRouterTemplate, "{{.globalinfo}}", globalinfo, -1)
- content = strings.Replace(content, "{{.routersDir}}", routersDir, -1)
- content = strings.Replace(content, "{{.globalimport}}", globalimport, -1)
- f.WriteString(content)
- }
-}
-
-func compareFile(pkgRealpath string) bool {
- if !utils.FileExists(filepath.Join(getRouterDir(pkgRealpath), commentFilename)) {
- return true
- }
- if utils.FileExists(lastupdateFilename) {
- content, err := ioutil.ReadFile(lastupdateFilename)
- if err != nil {
- return true
- }
- json.Unmarshal(content, &pkgLastupdate)
- lastupdate, err := getpathTime(pkgRealpath)
- if err != nil {
- return true
- }
- if v, ok := pkgLastupdate[pkgRealpath]; ok {
- if lastupdate <= v {
- return false
- }
- }
- }
- return true
-}
-
-func savetoFile(pkgRealpath string) {
- lastupdate, err := getpathTime(pkgRealpath)
- if err != nil {
- return
- }
- pkgLastupdate[pkgRealpath] = lastupdate
- d, err := json.Marshal(pkgLastupdate)
- if err != nil {
- return
- }
- ioutil.WriteFile(lastupdateFilename, d, os.ModePerm)
-}
-
-func getpathTime(pkgRealpath string) (lastupdate int64, err error) {
- fl, err := ioutil.ReadDir(pkgRealpath)
- if err != nil {
- return lastupdate, err
- }
- for _, f := range fl {
- var t int64
- if f.IsDir() {
- t, err = getpathTime(filepath.Join(pkgRealpath, f.Name()))
- if err != nil {
- return lastupdate, err
- }
- } else {
- t = f.ModTime().UnixNano()
- }
- if lastupdate < t {
- lastupdate = t
- }
- }
- return lastupdate, nil
-}
-
-func getRouterDir(pkgRealpath string) string {
- dir := filepath.Dir(pkgRealpath)
- routersDir := AppConfig.DefaultString("routersdir", "routers")
- return filepath.Join(dir, routersDir)
-}
diff --git a/server/web/parser_test.go b/server/web/parser_test.go
deleted file mode 100644
index 1dead882..00000000
--- a/server/web/parser_test.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2020 beego
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package web
-
-import (
- "os"
- "path/filepath"
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func Test_getRouterDir(t *testing.T) {
- pkg := filepath.Dir(os.TempDir())
-
- res := getRouterDir(pkg)
- assert.Equal(t, filepath.Join(pkg, "routers"), res)
- AppConfig.Set("routersdir", "cus_routers")
- res = getRouterDir(pkg)
- assert.Equal(t, filepath.Join(pkg, "cus_routers"), res)
-
-}