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