github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/repository/tracker/databaseNib_test.go (about)

     1  package tracker
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"strings"
     7  
     8  	. "gopkg.in/check.v1"
     9  )
    10  
    11  var _ = Suite(&DatabaseNIBTrackerTests{})
    12  
    13  type DatabaseNIBTrackerTests struct {
    14  	dirName      string
    15  	databasePath string
    16  }
    17  
    18  func (t *DatabaseNIBTrackerTests) SetUpTest(c *C) {
    19  	t.dirName = c.MkDir()
    20  	t.databasePath = filepath.Join(t.dirName, "test.db")
    21  }
    22  
    23  func (t *DatabaseNIBTrackerTests) getTracker() (NIBTracker, error) {
    24  	return NewDatabaseNIBTracker(t.databasePath, t.dirName)
    25  }
    26  
    27  func (t *DatabaseNIBTrackerTests) getVerifiedTracker(c *C) NIBTracker {
    28  	tracker, err := t.getTracker()
    29  	c.Assert(err, IsNil)
    30  	return tracker
    31  }
    32  
    33  // It should create a database if none has exists yet.
    34  func (t *DatabaseNIBTrackerTests) TestDatabaseCreation(c *C) {
    35  	_, err := t.getTracker()
    36  	c.Assert(err, IsNil)
    37  	_, err = os.Stat(t.databasePath)
    38  	c.Assert(err, IsNil)
    39  }
    40  
    41  func (t *DatabaseNIBTrackerTests) TestDatabaseCreationNonDirectory(c *C) {
    42  	err := os.Remove(t.dirName)
    43  	c.Assert(err, IsNil)
    44  	_, err = t.getTracker()
    45  	c.Assert(err, NotNil)
    46  }
    47  
    48  func (t *DatabaseNIBTrackerTests) TestAdd(c *C) {
    49  	tracker := t.getVerifiedTracker(c)
    50  	err := tracker.Add("/"+strings.Repeat("5", 4095), "123")
    51  	c.Assert(err, IsNil)
    52  }
    53  
    54  func (t *DatabaseNIBTrackerTests) TestDoubleAdd(c *C) {
    55  	tracker := t.getVerifiedTracker(c)
    56  	err := tracker.Add("/test", "123")
    57  	c.Assert(err, IsNil)
    58  	err = tracker.Add("/test", "123")
    59  	c.Assert(err, IsNil)
    60  
    61  	responses, err := tracker.SearchPrefix("/test")
    62  	c.Assert(err, IsNil)
    63  	c.Assert(len(responses), Equals, 1)
    64  }
    65  
    66  func (t *DatabaseNIBTrackerTests) TestAddOverlength(c *C) {
    67  	tracker := t.getVerifiedTracker(c)
    68  	err := tracker.Add("/"+strings.Repeat("5", 8000), "123")
    69  	c.Assert(err, NotNil)
    70  }
    71  
    72  func (t *DatabaseNIBTrackerTests) TestAddExisting(c *C) {
    73  	tracker := t.getVerifiedTracker(c)
    74  	err := tracker.Add("/test", "123")
    75  	c.Assert(err, IsNil)
    76  	err = tracker.Add("/test", "456")
    77  	c.Assert(err, IsNil)
    78  	resp, err := tracker.Get("/test")
    79  	c.Assert(err, IsNil)
    80  	c.Assert(resp.NIBID, Equals, "456")
    81  }
    82  
    83  func (t *DatabaseNIBTrackerTests) TestGet(c *C) {
    84  	tracker := t.getVerifiedTracker(c)
    85  	err := tracker.Add("/test", "123")
    86  	c.Assert(err, IsNil)
    87  	resp, err := tracker.Get("/test")
    88  	c.Assert(err, IsNil)
    89  	c.Assert(resp.NIBID, Equals, "123")
    90  }
    91  
    92  func (t *DatabaseNIBTrackerTests) TestGetNotExists(c *C) {
    93  	tracker := t.getVerifiedTracker(c)
    94  	resp, err := tracker.Get("/test")
    95  	c.Assert(err, NotNil)
    96  	c.Assert(resp, IsNil)
    97  }
    98  
    99  func (t *DatabaseNIBTrackerTests) TestSearchPrefixEmpty(c *C) {
   100  	tracker := t.getVerifiedTracker(c)
   101  	resp, err := tracker.SearchPrefix("/test")
   102  	c.Assert(err, IsNil)
   103  	c.Assert(len(resp), Equals, 0)
   104  }
   105  
   106  func (t *DatabaseNIBTrackerTests) TestSearchPrefix(c *C) {
   107  	tracker := t.getVerifiedTracker(c)
   108  	add := func(path string, nibID string) {
   109  		err := tracker.Add(path, nibID)
   110  		c.Assert(err, IsNil)
   111  	}
   112  
   113  	add("/test", "123")
   114  	add("/test/sub", "234")
   115  	add("/test2/sub", "456")
   116  
   117  	resp, err := tracker.SearchPrefix("/test")
   118  	c.Assert(err, IsNil)
   119  	c.Assert(len(resp), Equals, 2)
   120  
   121  	for _, entry := range resp {
   122  		c.Assert(entry.Path, Not(Equals), "/test2/sub")
   123  	}
   124  }
   125  
   126  func (t *DatabaseNIBTrackerTests) TestRemove(c *C) {
   127  	tracker := t.getVerifiedTracker(c)
   128  	add := func(path string, nibID string) {
   129  		err := tracker.Add(path, nibID)
   130  		c.Assert(err, IsNil)
   131  	}
   132  
   133  	add("/test", "123")
   134  	err := tracker.Remove("/test")
   135  	c.Assert(err, IsNil)
   136  
   137  	_, err = tracker.Get("/test")
   138  	c.Assert(err, NotNil)
   139  }
   140  
   141  func (t *DatabaseNIBTrackerTests) TestRemoveNotExisting(c *C) {
   142  	tracker := t.getVerifiedTracker(c)
   143  	err := tracker.Remove("/test")
   144  	c.Assert(err, NotNil)
   145  }