func Test_PostgresCacher(t *testing.T) {
	Convey("Test postgres cache adapter", t, func() {

		Convey("Basic operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))

			t.Get("/", new(CacheAction))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})

		Convey("Increase and decrease operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))

			t.Get("/", new(Cache2Action))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})
	})
}
func Test_LedisCacher(t *testing.T) {
	Convey("Test ledis cache adapter", t, func() {
		opt := cache.Options{
			Adapter:       "ledis",
			AdapterConfig: "data_dir=./tmp.db",
			Interval:      1,
		}

		Convey("Basic operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))

			t.Get("/", new(CacheAction))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)

			t.Get("/id", new(Cache2Action))

			resp = httptest.NewRecorder()
			req, err = http.NewRequest("GET", "/id", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})
	})
}
func Test_MemcacheCacher(t *testing.T) {
	Convey("Test memcache cache adapter", t, func() {
		opt := cache.Options{
			Adapter:       "memcache",
			AdapterConfig: "127.0.0.1:9090",
		}

		Convey("Basic operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))

			t.Get("/", new(CacheAction))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})

		Convey("Increase and decrease operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))
			t.Get("/", new(Cache2Action))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})
	})
}
func Test_RedisCacher(t *testing.T) {
	Convey("Test redis cache adapter", t, func() {
		opt := cache.Options{
			Adapter:       "redis",
			AdapterConfig: "addr=:6379,prefix=cache:",
		}

		Convey("Basic operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))
			t.Get("/", new(CacheAction))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})

		Convey("Increase and decrease operations", func() {
			t := tango.New()
			t.Use(cache.New(opt))
			t.Get("/", new(Cache2Action))

			resp := httptest.NewRecorder()
			req, err := http.NewRequest("GET", "/", nil)
			So(err, ShouldBeNil)
			t.ServeHTTP(resp, req)
		})
	})
}
Exemple #5
0
func TestTagErrors(t *testing.T) {
	called := false
	c := NewCache(func(t reflect.StructTag) (string, bool, interface{}, error) {
		called = true
		s := t.Get("f")
		if s == "bad" {
			return "", false, nil, errors.New("error")
		}
		return s, true, nil, nil
	}, nil)

	type T struct {
		X int `f:"ok"`
		Y int `f:"bad"`
	}

	_, err := c.Fields(reflect.TypeOf(T{}))
	if !called {
		t.Fatal("tag parser not called")
	}
	if err == nil {
		t.Error("want error, got nil")
	}
	// Second time, we should cache the error.
	called = false
	_, err = c.Fields(reflect.TypeOf(T{}))
	if called {
		t.Fatal("tag parser called on second time")
	}
	if err == nil {
		t.Error("want error, got nil")
	}
}
Exemple #6
0
func Test_Cacher(t *testing.T) {
	Convey("Use cache middleware", t, func() {
		t := tango.Classic()
		t.Use(New())
		t.Get("/", new(testCacheController))

		resp := httptest.NewRecorder()
		req, err := http.NewRequest("GET", "/", nil)
		So(err, ShouldBeNil)
		t.ServeHTTP(resp, req)
	})

	Convey("Register invalid adapter", t, func() {
		Convey("Adatper not exists", func() {
			defer func() {
				So(recover(), ShouldNotBeNil)
			}()

			t := tango.Classic()
			t.Use(New(Options{
				Adapter: "fake",
			}))
		})

		Convey("Provider value is nil", func() {
			defer func() {
				So(recover(), ShouldNotBeNil)
			}()

			Register("fake", nil)
		})

		Convey("Register twice", func() {
			defer func() {
				So(recover(), ShouldNotBeNil)
			}()

			Register("memory", &MemoryCacher{})
		})
	})
}
Exemple #7
0
func TestValue(t *testing.T) {

	Convey("steps method", t, func() {
		tasks := readBook(".files/1st.yaml")
		steps := tasks[0].Series
		fmt.Println(tasks[0].Name)
		So(steps, ShouldNotBeNil)
		So(len(steps), ShouldEqual, 2)
	})

	Convey("book steps has specific type", t, func() {
		tasks := readBook(".files/1st.yaml")
		steps := tasks[0].Parallel
		So(steps, ShouldNotBeNil)
		So(len(steps), ShouldEqual, 0)
	})

	Convey("walking path produces value", t, func() {
		a := make(map[string]interface{})
		a["stuff"] = "where"
		b := make(map[string]interface{})
		b["here"] = a

		u := NewValue(b)
		u = u.To("here.stuff")

		So(u.ToString(), ShouldEqual, "where")
	})

	Convey("should get the 'here' value from the map", t, func() {
		m := make(map[string]string)
		m["here"] = "there"
		t := NewValue(m)
		t = t.Get("here")
		So(t.HasValue(), ShouldBeTrue)
		So(t.IsMap(), ShouldBeFalse)
		So(t.ToString(), ShouldEqual, "there")
	})

	Convey("using a path to a value that EXISTS should produce that value", t, func() {
		m := createMap()
		t := NewValue(m)
		t = t.Get("here")
		So(t.HasValue(), ShouldBeTrue)
		So(t.IsMap(), ShouldBeFalse)
		So(t.ToInt(), ShouldEqual, 1)
	})

	Convey("converting with just key", t, func() {
		m := make(map[string]string)
		m["here"] = "stuff"
		h := reflect.ValueOf("here")
		actual := reflect.ValueOf(m).MapIndex(h)
		val := actual.Interface()
		So(val, ShouldEqual, "stuff")
	})

	Convey("should be true that Value with 1 has a Value and that value is not a map", t, func() {
		t := NewValue(1)
		So(t.HasValue(), ShouldBeTrue)
		So(t.IsMap(), ShouldBeFalse)
	})

	Convey("should be true that Value with 1 has a Value and that value is not a map", t, func() {
		types := []interface{}{
			make(map[string]string),
			make(map[string]int),
			make(map[string]interface{}),
			make(map[interface{}]interface{}),
		}
		for _, k := range types {
			t := NewValue(k)
			So(t.HasValue(), ShouldBeTrue)
			isMap := t.IsMap()
			if !isMap {
				dumpType(k)
			}
			So(isMap, ShouldBeTrue)
		}
	})

	Convey("using a path to a value that DOESN'T exist should produce nil value", t, func() {
		m := createMap()
		t := NewValue(m)
		t = t.Get("nope")
		So(t.HasValue(), ShouldBeFalse)
		So(t.IsMap(), ShouldBeFalse)
	})

	Convey("a map backed Value should return true for isMap", t, func() {
		m := createMap()
		t := NewValue(m)
		So(t.IsMap(), ShouldBeTrue)
	})

	Convey("a map backed Value should have a 'value'", t, func() {
		m := createMap()
		t := NewValue(m)
		So(t.values, ShouldNotBeNil)
		So(t.HasValue(), ShouldBeTrue)
	})

	Convey("new value should not have backing value(s)", t, func() {
		t := &Value{}
		So(t.values, ShouldBeNil)
		So(t.HasValue(), ShouldBeFalse)
	})
}