| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- package context
- import (
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "testing"
- "time"
- "github.com/syndtr/goleveldb/leveldb"
- )
- func TestGetPut(t *testing.T) {
- tmp, err := ioutil.TempDir("", "")
- if err != nil {
- t.Fatal(err)
- }
- defer os.RemoveAll(tmp)
- ctx, err := Open(filepath.Join(tmp, "data"))
- if err != nil {
- t.Fatal(err)
- }
- defer ctx.Close()
- if _, err := ctx.Get("not_found"); err != leveldb.ErrNotFound {
- t.Fatalf("expected ErrNotFound, got \"%v\"", err)
- }
- a := &Route{
- URL: "http://www.kellegous.com/",
- Time: time.Now(),
- }
- if err := ctx.Put("key", a); err != nil {
- t.Fatal(err)
- }
- b, err := ctx.Get("key")
- if err != nil {
- t.Fatal(err)
- }
- if b.URL != a.URL {
- t.Fatalf("expected URL of %s, got %s", a.URL, b.URL)
- }
- if !b.Time.Equal(a.Time) {
- t.Fatalf("expected Time of %s, got %s", a.Time, b.Time)
- }
- }
- func TestNextID(t *testing.T) {
- tmp, err := ioutil.TempDir("", "")
- if err != nil {
- t.Fatal(err)
- }
- defer os.RemoveAll(tmp)
- ctx, err := Open(filepath.Join(tmp, "data"))
- if err != nil {
- t.Fatal(err)
- }
- defer ctx.Close()
- var e uint64 = 1
- for i := 0; i < 501; i++ {
- r, err := ctx.NextID()
- if err != nil {
- t.Fatal(err)
- }
- if r != e {
- t.Fatalf("expected %d, got %d", e, r)
- }
- e++
- }
- }
- func TestEmptyList(t *testing.T) {
- tmp, err := ioutil.TempDir("", "")
- if err != nil {
- t.Fatal(err)
- }
- defer os.RemoveAll(tmp)
- ctx, err := Open(filepath.Join(tmp, "data"))
- if err != nil {
- t.Fatal(err)
- }
- it := ctx.List(nil)
- defer it.Release()
- if it.Valid() {
- t.Fatal("Expected iterator to be invalid at start")
- }
- if it.Next() {
- t.Fatal("Expected there to be no next")
- }
- if err := it.Error(); err != nil {
- t.Fatal(err)
- }
- }
- func putRoutes(ctx *Context, names ...string) error {
- for _, name := range names {
- if err := ctx.Put(name, &Route{
- URL: fmt.Sprintf("http://%s/", name),
- Time: time.Unix(0, 420),
- }); err != nil {
- return err
- }
- }
- return nil
- }
- func mustBeIterOf(t *testing.T, iter *Iter, names ...string) {
- defer iter.Release()
- if iter.Valid() {
- t.Fatal("expected Iter to be invalid at start")
- }
- if err := iter.Error(); err != nil {
- t.Fatal("expected Iter not to begin with error")
- }
- if iter.Name() != "" {
- t.Fatalf("expected empty name but got \"%s\"", iter.Name())
- }
- if iter.Route() != nil {
- t.Fatalf("expected empty route but got %v", iter.Route())
- }
- for i, name := range names {
- if !iter.Next() {
- t.Fatalf("at item %d, expected more items", i)
- }
- if !iter.Valid() {
- t.Fatalf("on item %d, expected a valid iterator", i)
- }
- if iter.Name() != name {
- t.Fatalf("expected name of %s, got %s", name, iter.Name())
- }
- if iter.Route().URL != fmt.Sprintf("http://%s/", name) {
- t.Fatalf("expected route to have URL of http://%s/ got %s", name, iter.Route().URL)
- }
- }
- if iter.Next() {
- t.Fatal("iterator has too many items")
- }
- if iter.Valid() {
- t.Fatal("iterator should not be valid at end")
- }
- }
- func TestList(t *testing.T) {
- tmp, err := ioutil.TempDir("", "")
- if err != nil {
- t.Fatal(err)
- }
- defer os.RemoveAll(tmp)
- ctx, err := Open(filepath.Join(tmp, "data"))
- if err != nil {
- t.Fatal(err)
- }
- if err := putRoutes(ctx, "a", "c", "d"); err != nil {
- t.Fatal(err)
- }
- mustBeIterOf(t, ctx.List(nil), "a", "c", "d")
- mustBeIterOf(t, ctx.List([]byte{'b'}), "c", "d")
- mustBeIterOf(t, ctx.List([]byte{'z'}))
- }
|