| OLD | NEW |
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package serialize | 5 package serialize |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "bytes" | 8 "bytes" |
| 9 "fmt" | 9 "fmt" |
| 10 "io" | 10 "io" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 } | 50 } |
| 51 | 51 |
| 52 func TestPropertyMapSerialization(t *testing.T) { | 52 func TestPropertyMapSerialization(t *testing.T) { |
| 53 t.Parallel() | 53 t.Parallel() |
| 54 | 54 |
| 55 now := time.Now().UTC() | 55 now := time.Now().UTC() |
| 56 tests := []dspmapTC{ | 56 tests := []dspmapTC{ |
| 57 { | 57 { |
| 58 "basic", | 58 "basic", |
| 59 ds.PropertyMap{ | 59 ds.PropertyMap{ |
| 60 » » » » "R": {mp(false), mp(2.1), mpNI(3)}, | 60 » » » » "R": ds.PropertySlice{mp(false), mp(2.1), mpNI(3
)}, |
| 61 » » » » "S": {mp("hello"), mp("world")}, | 61 » » » » "S": ds.PropertySlice{mp("hello"), mp("world")}, |
| 62 }, | 62 }, |
| 63 }, | 63 }, |
| 64 { | 64 { |
| 65 "keys", | 65 "keys", |
| 66 ds.PropertyMap{ | 66 ds.PropertyMap{ |
| 67 » » » » "DS": { | 67 » » » » "DS": ds.PropertySlice{ |
| 68 mp(mkKey("appy", "ns", "Foo", 7)), | 68 mp(mkKey("appy", "ns", "Foo", 7)), |
| 69 mp(mkKey("other", "", "Yot", "wheeep")), | 69 mp(mkKey("other", "", "Yot", "wheeep")), |
| 70 mp((*ds.Key)(nil)), | 70 mp((*ds.Key)(nil)), |
| 71 }, | 71 }, |
| 72 » » » » "blobstore": {mp(blobstore.Key("sup")), mp(blobs
tore.Key("nerds"))}, | 72 » » » » "blobstore": ds.PropertySlice{mp(blobstore.Key("
sup")), mp(blobstore.Key("nerds"))}, |
| 73 }, | 73 }, |
| 74 }, | 74 }, |
| 75 { | 75 { |
| 76 "geo", | 76 "geo", |
| 77 ds.PropertyMap{ | 77 ds.PropertyMap{ |
| 78 » » » » "G": {mp(ds.GeoPoint{Lat: 1, Lng: 2})}, | 78 » » » » "G": mp(ds.GeoPoint{Lat: 1, Lng: 2}), |
| 79 }, | 79 }, |
| 80 }, | 80 }, |
| 81 { | 81 { |
| 82 "data", | 82 "data", |
| 83 ds.PropertyMap{ | 83 ds.PropertyMap{ |
| 84 » » » » "S": {mp("sup"), mp("fool"), mp("nerd")
}, | 84 » » » » "S": ds.PropertySlice{mp("sup"), mp("fo
ol"), mp("nerd")}, |
| 85 » » » » "D.Foo.Nerd": {mp([]byte("sup")), mp([]byte("foo
l"))}, | 85 » » » » "D.Foo.Nerd": ds.PropertySlice{mp([]byte("sup"))
, mp([]byte("fool"))}, |
| 86 }, | 86 }, |
| 87 }, | 87 }, |
| 88 { | 88 { |
| 89 "time", | 89 "time", |
| 90 ds.PropertyMap{ | 90 ds.PropertyMap{ |
| 91 » » » » "T": { | 91 » » » » "T": ds.PropertySlice{ |
| 92 mp(now), | 92 mp(now), |
| 93 mp(now.Add(time.Second)), | 93 mp(now.Add(time.Second)), |
| 94 }, | 94 }, |
| 95 }, | 95 }, |
| 96 }, | 96 }, |
| 97 { | 97 { |
| 98 "empty vals", | 98 "empty vals", |
| 99 ds.PropertyMap{ | 99 ds.PropertyMap{ |
| 100 » » » » "T": {mp(true), mp(true)}, | 100 » » » » "T": ds.PropertySlice{mp(true), mp(true)}, |
| 101 » » » » "F": {mp(false), mp(false)}, | 101 » » » » "F": ds.PropertySlice{mp(false), mp(false)}, |
| 102 » » » » "N": {mp(nil), mp(nil)}, | 102 » » » » "N": ds.PropertySlice{mp(nil), mp(nil)}, |
| 103 » » » » "E": {}, | 103 » » » » "E": ds.PropertySlice{}, |
| 104 }, | 104 }, |
| 105 }, | 105 }, |
| 106 } | 106 } |
| 107 | 107 |
| 108 Convey("PropertyMap serialization", t, func() { | 108 Convey("PropertyMap serialization", t, func() { |
| 109 Convey("round trip", func() { | 109 Convey("round trip", func() { |
| 110 for _, tc := range tests { | 110 for _, tc := range tests { |
| 111 tc := tc | 111 tc := tc |
| 112 Convey(tc.name, func() { | 112 Convey(tc.name, func() { |
| 113 data := ToBytesWithContext(tc.props) | 113 data := ToBytesWithContext(tc.props) |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 } | 475 } |
| 476 | 476 |
| 477 func TestPartialSerialization(t *testing.T) { | 477 func TestPartialSerialization(t *testing.T) { |
| 478 t.Parallel() | 478 t.Parallel() |
| 479 | 479 |
| 480 fakeKey := mkKey("dev~app", "ns", "parentKind", "sid", "knd", 10) | 480 fakeKey := mkKey("dev~app", "ns", "parentKind", "sid", "knd", 10) |
| 481 | 481 |
| 482 Convey("TestPartialSerialization", t, func() { | 482 Convey("TestPartialSerialization", t, func() { |
| 483 Convey("list", func() { | 483 Convey("list", func() { |
| 484 pm := ds.PropertyMap{ | 484 pm := ds.PropertyMap{ |
| 485 » » » » "wat": {mpNI("thing"), mp("hat"), mp(100)}, | 485 » » » » "wat": ds.PropertySlice{mpNI("thing"), mp("hat"
), mp(100)}, |
| 486 » » » » "nerd": {mp(103.7)}, | 486 » » » » "nerd": mp(103.7), |
| 487 » » » » "spaz": {mpNI(false)}, | 487 » » » » "spaz": mpNI(false), |
| 488 } | 488 } |
| 489 sip := PropertyMapPartially(fakeKey, pm) | 489 sip := PropertyMapPartially(fakeKey, pm) |
| 490 So(len(sip), ShouldEqual, 4) | 490 So(len(sip), ShouldEqual, 4) |
| 491 | 491 |
| 492 Convey("single collated", func() { | 492 Convey("single collated", func() { |
| 493 Convey("indexableMap", func() { | 493 Convey("indexableMap", func() { |
| 494 So(sip, ShouldResemble, SerializedPmap{ | 494 So(sip, ShouldResemble, SerializedPmap{ |
| 495 "wat": { | 495 "wat": { |
| 496 ToBytes(mp("hat")), | 496 ToBytes(mp("hat")), |
| 497 ToBytes(mp(100)), | 497 ToBytes(mp(100)), |
| 498 // 'thing' is skipped, b
ecause it's not NoIndex | 498 // 'thing' is skipped, b
ecause it's not NoIndex |
| 499 }, | 499 }, |
| 500 "nerd": { | 500 "nerd": { |
| 501 ToBytes(mp(103.7)), | 501 ToBytes(mp(103.7)), |
| 502 }, | 502 }, |
| 503 "__key__": { | 503 "__key__": { |
| 504 ToBytes(mp(fakeKey)), | 504 ToBytes(mp(fakeKey)), |
| 505 }, | 505 }, |
| 506 "__ancestor__": { | 506 "__ancestor__": { |
| 507 ToBytes(mp(fakeKey)), | 507 ToBytes(mp(fakeKey)), |
| 508 ToBytes(mp(fakeKey.Paren
t())), | 508 ToBytes(mp(fakeKey.Paren
t())), |
| 509 }, | 509 }, |
| 510 }) | 510 }) |
| 511 }) | 511 }) |
| 512 }) | 512 }) |
| 513 }) | 513 }) |
| 514 }) | 514 }) |
| 515 } | 515 } |
| OLD | NEW |