go.mercari.io/datastore@v1.8.2/testsuite/gob.go (about) 1 package testsuite 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/base64" 7 "encoding/gob" 8 "testing" 9 10 "go.mercari.io/datastore" 11 ) 12 13 func gobDecode(ctx context.Context, t *testing.T, client datastore.Client) { 14 defer func() { 15 err := client.Close() 16 if err != nil { 17 t.Fatal(err) 18 } 19 }() 20 21 type Sub struct { 22 S string 23 } 24 25 type Data struct { 26 A string 27 B int 28 C datastore.GeoPoint 29 D *Sub 30 E datastore.Key 31 } 32 33 var b64 string 34 if false { 35 var ps datastore.PropertyList 36 var err error 37 ps, err = datastore.SaveStruct(ctx, &Data{ 38 A: "A", 39 B: 2, 40 C: datastore.GeoPoint{Lat: 1.1, Lng: 2.2}, 41 D: &Sub{S: "S"}, 42 E: client.IDKey("Test", 111, nil), 43 }) 44 if err != nil { 45 t.Fatal(err) 46 } 47 48 var buf bytes.Buffer 49 enc := gob.NewEncoder(&buf) 50 err = enc.Encode(ps) 51 if err != nil { 52 t.Fatal(err) 53 } 54 55 b64 = base64.StdEncoding.EncodeToString(buf.Bytes()) 56 t.Log(b64) 57 } else { 58 if IsCloudDatastoreClient(ctx) { 59 b64 = `G/+DAgEBDFByb3BlcnR5TGlzdAH/hAAB/4IAADX/gQMBAQhQcm9wZXJ0eQH/ggABAwEETmFtZQEMAAEFVmFsdWUBEAABB05vSW5kZXgBAgAAAG//hAAFAQFBAQZzdHJpbmcMAwABQQABAUIBBWludDY0BAIABAABAUMBIGdvLm1lcmNhcmkuaW8vZGF0YXN0b3JlLkdlb1BvaW50/4UDAQEIR2VvUG9pbnQB/4YAAQIBA0xhdAEIAAEDTG5nAQgAAABc/4YVAfiamZmZmZnxPwH4mpmZmZmZAUAAAAEBRAERKmRhdGFzdG9yZS5FbnRpdHn/hwMBAQZFbnRpdHkB/4gAAQIBA0tleQH/igABClByb3BlcnRpZXMB/4wAAAAP/4kFAQEDS2V5Af+KAAAAI/+LAgEBFFtdZGF0YXN0b3JlLlByb3BlcnR5Af+MAAH/ggAAPv+IFAIBAQFTAQZzdHJpbmcMAwABUwAAAAEBRQEXKmNsb3VkZGF0YXN0b3JlLmtleUltcGz/jQUBAv+QAAAAbP+OaABmWP+RAwEBBmdvYktleQH/kgABBgEES2luZAEMAAEIU3RyaW5nSUQBDAABBUludElEAQQAAQZQYXJlbnQB/5IAAQVBcHBJRAEMAAEJTmFtZXNwYWNlAQwAAAAM/5IBBFRlc3QC/94AAA==` 60 } else if IsAEDatastoreClient(ctx) { 61 b64 = `G/+DAgEBDFByb3BlcnR5TGlzdAH/hAAB/4IAADX/gQMBAQhQcm9wZXJ0eQH/ggABAwEETmFtZQEMAAEFVmFsdWUBEAABB05vSW5kZXgBAgAAAG//hAAFAQFBAQZzdHJpbmcMAwABQQABAUIBBWludDY0BAIABAABAUMBIGdvLm1lcmNhcmkuaW8vZGF0YXN0b3JlLkdlb1BvaW50/4UDAQEIR2VvUG9pbnQB/4YAAQIBA0xhdAEIAAEDTG5nAQgAAABc/4YVAfiamZmZmZnxPwH4mpmZmZmZAUAAAAEBRAERKmRhdGFzdG9yZS5FbnRpdHn/hwMBAQZFbnRpdHkB/4gAAQIBA0tleQH/igABClByb3BlcnRpZXMB/4wAAAAP/4kFAQEDS2V5Af+KAAAAI/+LAgEBFFtdZGF0YXN0b3JlLlByb3BlcnR5Af+MAAH/ggAAO/+IFAIBAQFTAQZzdHJpbmcMAwABUwAAAAEBRQEUKmFlZGF0YXN0b3JlLmtleUltcGz/jQUBAv+QAAAAef+OdQBzWP+RAwEBBmdvYktleQH/kgABBgEES2luZAEMAAEIU3RyaW5nSUQBDAABBUludElEAQQAAQZQYXJlbnQB/5IAAQVBcHBJRAEMAAEJTmFtZXNwYWNlAQwAAAAZ/5IBBFRlc3QC/94CC2Rldn50ZXN0YXBwAAA=` 62 } else { 63 t.Fatal("unexpected state") 64 } 65 } 66 67 b, err := base64.StdEncoding.DecodeString(b64) 68 if err != nil { 69 t.Fatal(err) 70 } 71 72 buf := bytes.NewBuffer(b) 73 dec := gob.NewDecoder(buf) 74 var ps datastore.PropertyList 75 err = dec.Decode(&ps) 76 if err != nil { 77 t.Fatal(err) 78 } 79 80 obj := &Data{} 81 err = datastore.LoadStruct(ctx, obj, ps) 82 if err != nil { 83 t.Fatal(err) 84 } 85 86 if v := obj.A; v != "A" { 87 t.Errorf("unexpected: %v", v) 88 } 89 if v := obj.B; v != 2 { 90 t.Errorf("unexpected: %v", v) 91 } 92 if v := obj.C.Lat; v != 1.1 { 93 t.Errorf("unexpected: %v", v) 94 } 95 if v := obj.C.Lng; v != 2.2 { 96 t.Errorf("unexpected: %v", v) 97 } 98 if v := obj.D.S; v != "S" { 99 t.Errorf("unexpected: %v", v) 100 } 101 if v := obj.E.Kind(); v != "Test" { 102 t.Errorf("unexpected: %v", v) 103 } 104 if v := obj.E.ID(); v != 111 { 105 t.Errorf("unexpected: %v", v) 106 } 107 }