github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/pingcap/tidb/store/localstore/goleveldb/goleveldb_test.go (about)

     1  // Copyright 2015 PingCAP, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package goleveldb
    15  
    16  import (
    17  	"testing"
    18  
    19  	. "github.com/insionng/yougam/libraries/pingcap/check"
    20  	"github.com/insionng/yougam/libraries/pingcap/tidb/store/localstore/engine"
    21  	"github.com/insionng/yougam/libraries/pingcap/tidb/util/testleak"
    22  )
    23  
    24  func TestT(t *testing.T) {
    25  	TestingT(t)
    26  }
    27  
    28  var _ = Suite(&testSuite{})
    29  
    30  type testSuite struct {
    31  	db engine.DB
    32  }
    33  
    34  func (s *testSuite) SetUpTest(c *C) {
    35  	var (
    36  		d   MemoryDriver
    37  		err error
    38  	)
    39  	s.db, err = d.Open("memory")
    40  	c.Assert(err, IsNil)
    41  }
    42  
    43  func (s *testSuite) TearDownTest(c *C) {
    44  	s.db.Close()
    45  }
    46  
    47  func (s *testSuite) TestGetSet(c *C) {
    48  	defer testleak.AfterTest(c)()
    49  	db := s.db
    50  
    51  	b := db.NewBatch()
    52  	b.Put([]byte("a"), []byte("1"))
    53  	b.Put([]byte("b"), []byte("2"))
    54  	b.Delete([]byte("c"))
    55  
    56  	err := db.Commit(b)
    57  	c.Assert(err, IsNil)
    58  
    59  	v, err := db.Get([]byte("a"))
    60  	c.Assert(err, IsNil)
    61  	c.Assert(v, DeepEquals, []byte("1"))
    62  
    63  	v, err = db.Get([]byte("c"))
    64  	c.Assert(err, NotNil)
    65  	c.Assert(v, IsNil)
    66  
    67  	b = db.NewBatch()
    68  	b.Put([]byte("a"), []byte("2"))
    69  	err = db.Commit(b)
    70  	c.Assert(err, IsNil)
    71  
    72  	v, err = db.Get([]byte("a"))
    73  	c.Assert(err, IsNil)
    74  	c.Assert(v, DeepEquals, []byte("2"))
    75  }
    76  
    77  func (s *testSuite) TestSeek(c *C) {
    78  	defer testleak.AfterTest(c)()
    79  	b := s.db.NewBatch()
    80  	b.Put([]byte("a"), []byte("1"))
    81  	b.Put([]byte("b"), []byte("2"))
    82  	err := s.db.Commit(b)
    83  	c.Assert(err, IsNil)
    84  
    85  	k, v, err := s.db.Seek(nil)
    86  	c.Assert(err, IsNil)
    87  	c.Assert(k, BytesEquals, []byte("a"))
    88  	c.Assert(v, BytesEquals, []byte("1"))
    89  
    90  	k, v, err = s.db.Seek([]byte("a"))
    91  	c.Assert(err, IsNil)
    92  	c.Assert(k, BytesEquals, []byte("a"))
    93  	c.Assert(v, BytesEquals, []byte("1"))
    94  
    95  	k, v, err = s.db.Seek([]byte("b"))
    96  	c.Assert(err, IsNil)
    97  	c.Assert(k, BytesEquals, []byte("b"))
    98  	c.Assert(v, BytesEquals, []byte("2"))
    99  
   100  	k, v, err = s.db.Seek([]byte("a1"))
   101  	c.Assert(err, IsNil)
   102  	c.Assert(k, BytesEquals, []byte("b"))
   103  	c.Assert(v, BytesEquals, []byte("2"))
   104  
   105  	k, v, err = s.db.Seek([]byte("c1"))
   106  	c.Assert(err, NotNil)
   107  	c.Assert(k, IsNil)
   108  	c.Assert(v, IsNil)
   109  }
   110  
   111  func (s *testSuite) TestPrevSeek(c *C) {
   112  	defer testleak.AfterTest(c)()
   113  	b := s.db.NewBatch()
   114  	b.Put([]byte("b"), []byte("1"))
   115  	b.Put([]byte("c"), []byte("2"))
   116  	err := s.db.Commit(b)
   117  	c.Assert(err, IsNil)
   118  
   119  	k, v, err := s.db.SeekReverse(nil)
   120  	c.Assert(err, IsNil)
   121  	c.Assert(k, BytesEquals, []byte("c"))
   122  	c.Assert(v, BytesEquals, []byte("2"))
   123  
   124  	k, v, err = s.db.SeekReverse([]byte("d"))
   125  	c.Assert(err, IsNil)
   126  	c.Assert(k, BytesEquals, []byte("c"))
   127  	c.Assert(v, BytesEquals, []byte("2"))
   128  
   129  	k, v, err = s.db.SeekReverse([]byte("c"))
   130  	c.Assert(err, IsNil)
   131  	c.Assert(k, BytesEquals, []byte("b"))
   132  	c.Assert(v, BytesEquals, []byte("1"))
   133  
   134  	k, v, err = s.db.SeekReverse([]byte("bb"))
   135  	c.Assert(err, IsNil)
   136  	c.Assert(k, BytesEquals, []byte("b"))
   137  	c.Assert(v, BytesEquals, []byte("1"))
   138  
   139  	k, v, err = s.db.SeekReverse([]byte("b"))
   140  	c.Assert(err, NotNil)
   141  	c.Assert(string(k), Equals, "")
   142  	c.Assert(string(v), Equals, "")
   143  
   144  	k, v, err = s.db.SeekReverse([]byte("a"))
   145  	c.Assert(err, NotNil)
   146  	c.Assert(k, IsNil)
   147  	c.Assert(v, IsNil)
   148  }