123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488 |
- package test
- import (
- "git.sxidc.com/go-framework/baize/framework/core/tag/sql/sql_mapping"
- "git.sxidc.com/go-tools/utils/encoding"
- "git.sxidc.com/go-tools/utils/strutils"
- "github.com/pkg/errors"
- "math/rand"
- "reflect"
- "strings"
- "testing"
- )
- type SqlMappingTagStruct struct {
- Ignore string `sqlmapping:"-"`
- Column string `sqlmapping:"column:test_column"`
- Key string `sqlmapping:"key"`
- NotUpdate string `sqlmapping:"notUpdate"`
- UpdateClear string `sqlmapping:"updateClear"`
- Aes string `sqlmapping:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- JoinWith []string `sqlmapping:"joinWith:##"`
- Trim string `sqlmapping:"trim:||"`
- TrimPrefix string `sqlmapping:"trimPrefix:{{"`
- TrimSuffix string `sqlmapping:"trimSuffix:}}"`
- WrongAes int `sqlmapping:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- WrongJoinWith string `sqlmapping:"joinWith:##"`
- WrongTrim int `sqlmapping:"trim:||"`
- WrongTrimPrefix int `sqlmapping:"trimPrefix:{{"`
- WrongTrimSuffix int `sqlmapping:"trimSuffix:}}"`
- }
- func (s SqlMappingTagStruct) checkFields(t *testing.T, fields []sql_mapping.Field) {
- if len(fields) != reflect.TypeOf(s).NumField()-1 {
- t.Fatalf("%+v\n", errors.Errorf("有字段没有被解析"))
- }
- for _, field := range fields {
- if field.FieldName == "Ignore" || field.ColumnName == "ignore" {
- t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
- }
- switch field.FieldName {
- case "Column":
- if s.Column != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.Column, field.Value))
- }
- if field.ColumnName != "test_column" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- case "Key":
- if field.ColumnName != "key" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.Key != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.Key, field.Value))
- }
- if !field.IsKey {
- t.Fatalf("%+v\n", errors.Errorf("key解析错误"))
- }
- case "NotUpdate":
- if field.ColumnName != "not_update" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.NotUpdate != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.NotUpdate, field.Value))
- }
- if field.CanUpdate {
- t.Fatalf("%+v\n", errors.Errorf("notUpdate解析错误"))
- }
- case "UpdateClear":
- if field.ColumnName != "update_clear" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.UpdateClear != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.UpdateClear, field.Value))
- }
- if !field.CanUpdateClear {
- t.Fatalf("%+v\n", errors.Errorf("updateClear解析错误"))
- }
- case "Aes":
- if field.ColumnName != "aes" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- encrypted, err := encoding.AESEncrypt(s.Aes, "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
- if err != nil {
- t.Fatalf("%+v\n", errors.Errorf(err.Error()))
- }
- if encrypted != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, encrypted, field.Value))
- }
- case "JoinWith":
- if field.ColumnName != "join_with" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.Join(s.JoinWith, "##") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.Join(s.JoinWith, "##"), field.Value))
- }
- case "Trim":
- if field.ColumnName != "trim" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.Trim(s.Trim, "||") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.Trim(s.Trim, "||"), field.Value))
- }
- case "TrimPrefix":
- if field.ColumnName != "trim_prefix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.TrimPrefix(s.TrimPrefix, "{{") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.TrimPrefix(s.TrimPrefix, "{{"), field.Value))
- }
- case "TrimSuffix":
- if field.ColumnName != "trim_suffix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.TrimSuffix(s.TrimSuffix, "}}") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.TrimSuffix(s.TrimPrefix, "}}"), field.Value))
- }
- case "WrongAes":
- if field.ColumnName != "wrong_aes" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.WrongAes != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongAes, field.Value))
- }
- case "WrongJoinWith":
- if field.ColumnName != "wrong_join_with" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.WrongJoinWith != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongJoinWith, field.Value))
- }
- case "WrongTrim":
- if field.ColumnName != "wrong_trim" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.WrongTrim != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongTrim, field.Value))
- }
- case "WrongTrimPrefix":
- if field.ColumnName != "wrong_trim_prefix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.WrongTrimPrefix != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongTrimPrefix, field.Value))
- }
- case "WrongTrimSuffix":
- if field.ColumnName != "wrong_trim_suffix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if s.WrongTrimSuffix != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongTrimPrefix, field.Value))
- }
- default:
- t.Fatalf("%+v\n", errors.Errorf("未知的字段名: tag fieldName: %v", field.FieldName))
- }
- }
- }
- type SqlMappingTagPointerFieldsStruct struct {
- Ignore *string `sqlmapping:"-"`
- Column *string `sqlmapping:"column:test_column"`
- Key *string `sqlmapping:"key"`
- NotUpdate *string `sqlmapping:"notUpdate"`
- UpdateClear *string `sqlmapping:"updateClear"`
- Aes *string `sqlmapping:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- JoinWith *[]string `sqlmapping:"joinWith:##"`
- Trim *string `sqlmapping:"trim:||"`
- TrimPrefix *string `sqlmapping:"trimPrefix:{{"`
- TrimSuffix *string `sqlmapping:"trimSuffix:}}"`
- WrongAes *int `sqlmapping:"aes:@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L"`
- WrongJoinWith *string `sqlmapping:"joinWith:##"`
- WrongTrim *int `sqlmapping:"trim:||"`
- WrongTrimPrefix *int `sqlmapping:"trimPrefix:{{"`
- WrongTrimSuffix *int `sqlmapping:"trimSuffix:}}"`
- }
- func (s SqlMappingTagPointerFieldsStruct) checkFields(t *testing.T, fields []sql_mapping.Field) {
- for _, field := range fields {
- if field.FieldName == "Ignore" || field.ColumnName == "ignore" {
- t.Fatalf("%+v\n", errors.Errorf("忽略字段没有被忽略"))
- }
- switch field.FieldName {
- case "Column":
- if *s.Column != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.Column, field.Value))
- }
- if field.ColumnName != "test_column" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- case "Key":
- if field.ColumnName != "key" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.Key != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.Key, field.Value))
- }
- if !field.IsKey {
- t.Fatalf("%+v\n", errors.Errorf("key解析错误"))
- }
- case "NotUpdate":
- if field.ColumnName != "not_update" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.NotUpdate != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.NotUpdate, field.Value))
- }
- if field.CanUpdate {
- t.Fatalf("%+v\n", errors.Errorf("notUpdate解析错误"))
- }
- case "UpdateClear":
- if field.ColumnName != "update_clear" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.UpdateClear != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.UpdateClear, field.Value))
- }
- if !field.CanUpdateClear {
- t.Fatalf("%+v\n", errors.Errorf("updateClear解析错误"))
- }
- case "Aes":
- if field.ColumnName != "aes" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- encrypted, err := encoding.AESEncrypt(*s.Aes, "@MKU^*HF%p%G43Fd)UAHCVD#$XZSWQ@L")
- if err != nil {
- t.Fatalf("%+v\n", errors.Errorf(err.Error()))
- }
- if encrypted != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, encrypted, field.Value))
- }
- case "JoinWith":
- if field.ColumnName != "join_with" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.Join(*s.JoinWith, "##") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确: fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.Join(*s.JoinWith, "##"), field.Value))
- }
- case "Trim":
- if field.ColumnName != "trim" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.Trim(*s.Trim, "||") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.Trim(*s.Trim, "||"), field.Value))
- }
- case "TrimPrefix":
- if field.ColumnName != "trim_prefix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.TrimPrefix(*s.TrimPrefix, "{{") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.TrimPrefix(*s.TrimPrefix, "{{"), field.Value))
- }
- case "TrimSuffix":
- if field.ColumnName != "trim_suffix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if strings.TrimSuffix(*s.TrimSuffix, "}}") != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, strings.TrimSuffix(*s.TrimPrefix, "}}"), field.Value))
- }
- case "WrongAes":
- if field.ColumnName != "wrong_aes" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.WrongAes != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongAes, field.Value))
- }
- case "WrongJoinWith":
- if field.ColumnName != "wrong_join_with" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.WrongJoinWith != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongJoinWith, field.Value))
- }
- case "WrongTrim":
- if field.ColumnName != "wrong_trim" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.WrongTrim != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongTrim, field.Value))
- }
- case "WrongTrimPrefix":
- if field.ColumnName != "wrong_trim_prefix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.WrongTrimPrefix != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongTrimPrefix, field.Value))
- }
- case "WrongTrimSuffix":
- if field.ColumnName != "wrong_trim_suffix" {
- t.Fatalf("%+v\n", errors.Errorf("列名解析测试错误: fieldName: %v, actual columnName: %v",
- field.FieldName, field.ColumnName))
- }
- if *s.WrongTrimSuffix != field.Value {
- t.Fatalf("%+v\n", errors.Errorf("值不正确:fieldName: %v, fieldValue %v, tagValue %v",
- field.FieldName, s.WrongTrimPrefix, field.Value))
- }
- default:
- t.Fatalf("%+v\n", errors.Errorf("未知的字段名: tag fieldName: %v", field.FieldName))
- }
- }
- }
- func TestSqlMappingTagDefaultUsage(t *testing.T) {
- ignore := strutils.SimpleUUID()
- column := strutils.SimpleUUID()
- key := strutils.SimpleUUID()
- notUpdate := strutils.SimpleUUID()
- updateClear := strutils.SimpleUUID()
- aes := strutils.SimpleUUID()
- joinWith := []string{strutils.SimpleUUID(), strutils.SimpleUUID()}
- trim := "||" + strutils.SimpleUUID() + "||"
- trimPrefix := "{{" + strutils.SimpleUUID()
- trimSuffix := strutils.SimpleUUID() + "}}"
- wrongAes := rand.Int()
- wrongJoinWith := strutils.SimpleUUID()
- wrongTrim := rand.Int()
- wrongTrimPrefix := rand.Int()
- wrongTrimSuffix := rand.Int()
- s := SqlMappingTagStruct{
- Ignore: ignore,
- Column: column,
- Key: key,
- NotUpdate: notUpdate,
- UpdateClear: updateClear,
- Aes: aes,
- JoinWith: joinWith,
- Trim: trim,
- TrimPrefix: trimPrefix,
- TrimSuffix: trimSuffix,
- WrongAes: wrongAes,
- WrongJoinWith: wrongJoinWith,
- WrongTrim: wrongTrim,
- WrongTrimPrefix: wrongTrimPrefix,
- WrongTrimSuffix: wrongTrimSuffix,
- }
- sPointerFields := SqlMappingTagPointerFieldsStruct{
- Ignore: &ignore,
- Column: &column,
- Key: &key,
- NotUpdate: ¬Update,
- UpdateClear: &updateClear,
- Aes: &aes,
- JoinWith: &joinWith,
- Trim: &trim,
- TrimPrefix: &trimPrefix,
- TrimSuffix: &trimSuffix,
- WrongAes: &wrongAes,
- WrongJoinWith: &wrongJoinWith,
- WrongTrim: &wrongTrim,
- WrongTrimPrefix: &wrongTrimPrefix,
- WrongTrimSuffix: &wrongTrimSuffix,
- }
- sPointerFieldsNil := SqlMappingTagPointerFieldsStruct{}
- fields, err := sql_mapping.DefaultUsage(s)
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- s.checkFields(t, fields)
- fields, err = sql_mapping.DefaultUsage(&s)
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- s.checkFields(t, fields)
- fields, err = sql_mapping.DefaultUsage(sPointerFields)
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- sPointerFields.checkFields(t, fields)
- fields, err = sql_mapping.DefaultUsage(&sPointerFields)
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- sPointerFields.checkFields(t, fields)
- fields, err = sql_mapping.DefaultUsage(sPointerFieldsNil)
- if err == nil || err.Error() != "无法设置值,请检查是否传递的是非指针结构变量且字段为nil" {
- t.Fatalf("%+v\n", errors.Errorf("没有检测出from如果有nil字段,必须使用指针结构变量"))
- }
- fields, err = sql_mapping.DefaultUsage(&sPointerFieldsNil)
- if err != nil {
- t.Fatalf("%+v\n", err)
- }
- sPointerFieldsNil.checkFields(t, fields)
- }
|