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  }