github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/shed/field_struct_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:44</date> 10 //</624450117755211776> 11 12 13 package shed 14 15 import ( 16 "testing" 17 18 "github.com/syndtr/goleveldb/leveldb" 19 ) 20 21 //teststructfield验证put和get操作 22 //结构字段的。 23 func TestStructField(t *testing.T) { 24 db, cleanupFunc := newTestDB(t) 25 defer cleanupFunc() 26 27 complexField, err := db.NewStructField("complex-field") 28 if err != nil { 29 t.Fatal(err) 30 } 31 32 type complexStructure struct { 33 A string 34 } 35 36 t.Run("get empty", func(t *testing.T) { 37 var s complexStructure 38 err := complexField.Get(&s) 39 if err != leveldb.ErrNotFound { 40 t.Fatalf("got error %v, want %v", err, leveldb.ErrNotFound) 41 } 42 want := "" 43 if s.A != want { 44 t.Errorf("got string %q, want %q", s.A, want) 45 } 46 }) 47 48 t.Run("put", func(t *testing.T) { 49 want := complexStructure{ 50 A: "simple string value", 51 } 52 err = complexField.Put(want) 53 if err != nil { 54 t.Fatal(err) 55 } 56 var got complexStructure 57 err = complexField.Get(&got) 58 if err != nil { 59 t.Fatal(err) 60 } 61 if got.A != want.A { 62 t.Errorf("got string %q, want %q", got.A, want.A) 63 } 64 65 t.Run("overwrite", func(t *testing.T) { 66 want := complexStructure{ 67 A: "overwritten string value", 68 } 69 err = complexField.Put(want) 70 if err != nil { 71 t.Fatal(err) 72 } 73 var got complexStructure 74 err = complexField.Get(&got) 75 if err != nil { 76 t.Fatal(err) 77 } 78 if got.A != want.A { 79 t.Errorf("got string %q, want %q", got.A, want.A) 80 } 81 }) 82 }) 83 84 t.Run("put in batch", func(t *testing.T) { 85 batch := new(leveldb.Batch) 86 want := complexStructure{ 87 A: "simple string batch value", 88 } 89 complexField.PutInBatch(batch, want) 90 err = db.WriteBatch(batch) 91 if err != nil { 92 t.Fatal(err) 93 } 94 var got complexStructure 95 err := complexField.Get(&got) 96 if err != nil { 97 t.Fatal(err) 98 } 99 if got.A != want.A { 100 t.Errorf("got string %q, want %q", got, want) 101 } 102 103 t.Run("overwrite", func(t *testing.T) { 104 batch := new(leveldb.Batch) 105 want := complexStructure{ 106 A: "overwritten string batch value", 107 } 108 complexField.PutInBatch(batch, want) 109 err = db.WriteBatch(batch) 110 if err != nil { 111 t.Fatal(err) 112 } 113 var got complexStructure 114 err := complexField.Get(&got) 115 if err != nil { 116 t.Fatal(err) 117 } 118 if got.A != want.A { 119 t.Errorf("got string %q, want %q", got, want) 120 } 121 }) 122 }) 123 } 124