initvalues_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package reduce_test
  2. import (
  3. "fmt"
  4. "reflect"
  5. "testing"
  6. "time"
  7. "git.wecise.com/wecise/odbserver/odb"
  8. "git.wecise.com/wecise/odbserver/odb/gapi"
  9. "git.wecise.com/wecise/odbserver/odb/query"
  10. )
  11. func TestInitValues(t *testing.T) {
  12. conf := odb.ODBConfig("0.0.0")
  13. odb.ODB = odb.NewOMDB(conf)
  14. var err error
  15. defer func() {
  16. if err != nil {
  17. t.Error(err)
  18. }
  19. }()
  20. keyspace := "ootest"
  21. classname := "/test/initvalues"
  22. mql_createclass := ``
  23. mql_cleardata := ``
  24. id := fmt.Sprint(time.Now().UnixNano())
  25. newvalues := map[string]interface{}{id: id}
  26. g, e := gapi.GetG(keyspace)
  27. if e != nil {
  28. err = e
  29. return
  30. }
  31. cstru := g.Class(classname)
  32. _, _, e = g.Query(mql_createclass)
  33. if e != nil {
  34. err = e
  35. return
  36. }
  37. _, _, e = g.Query(mql_cleardata)
  38. if e != nil {
  39. err = e
  40. return
  41. }
  42. _, e = g.WriteObjectValues(cstru, id, newvalues, false)
  43. if e != nil {
  44. err = e
  45. return
  46. }
  47. lastrow, e := g.GetLastRow(cstru, id, &query.QueryMeta{AsteriskNoBucket: true}, true)
  48. if e != nil {
  49. err = e
  50. return
  51. }
  52. initrow := map[string]interface{}{}
  53. e = g.InitValues(cstru, initrow)
  54. if e != nil {
  55. err = e
  56. return
  57. }
  58. if !func() bool {
  59. if len(lastrow) != len(initrow) {
  60. return false
  61. }
  62. for k, v := range lastrow {
  63. if v == nil && initrow[k] != nil ||
  64. v != nil && initrow[k] == nil {
  65. return false
  66. }
  67. if v != nil && initrow[k] != nil {
  68. if reflect.TypeOf(v) != reflect.TypeOf(initrow[k]) {
  69. return false
  70. }
  71. switch xv := initrow[k].(type) {
  72. case int:
  73. if xv != v.(int) {
  74. return false
  75. }
  76. case int64:
  77. if xv != v.(int64) {
  78. return false
  79. }
  80. case float32:
  81. if xv != v.(float32) {
  82. return false
  83. }
  84. case float64:
  85. if xv != v.(float64) {
  86. return false
  87. }
  88. case string:
  89. if xv != v.(string) {
  90. return false
  91. }
  92. case bool:
  93. if xv != v.(bool) {
  94. return false
  95. }
  96. }
  97. }
  98. }
  99. return true
  100. }() {
  101. err = fmt.Errorf("读出默认值和内存默认值不一致, \nlastrow=%#v, \ninitrow=%#v", lastrow, initrow)
  102. return
  103. }
  104. }