mirror of
https://github.com/kataras/iris.git
synced 2025-12-20 03:17:04 +00:00
Implement Cache as https://github.com/kataras/iris/issues/513
I love coding unique Iris staff!!!
This commit is contained in:
92
cache_test.go
Normal file
92
cache_test.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package iris_test
|
||||
|
||||
import (
|
||||
"github.com/kataras/iris"
|
||||
"github.com/kataras/iris/httptest"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
var testMarkdownContents = `## Hello Markdown from Iris
|
||||
|
||||
This is an example of Markdown with Iris
|
||||
|
||||
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
All features of Sundown are supported, including:
|
||||
|
||||
* **Compatibility**. The Markdown v1.0.3 test suite passes with
|
||||
the --tidy option. Without --tidy, the differences are
|
||||
mostly in whitespace and entity escaping, where blackfriday is
|
||||
more consistent and cleaner.
|
||||
|
||||
* **Common extensions**, including table support, fenced code
|
||||
blocks, autolinks, strikethroughs, non-strict emphasis, etc.
|
||||
|
||||
* **Safety**. Blackfriday is paranoid when parsing, making it safe
|
||||
to feed untrusted user input without fear of bad things
|
||||
happening. The test suite stress tests this and there are no
|
||||
known inputs that make it crash. If you find one, please let me
|
||||
know and send me the input that does it.
|
||||
|
||||
NOTE: "safety" in this context means *runtime safety only*. In order to
|
||||
protect yourself against JavaScript injection in untrusted content, see
|
||||
[this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).
|
||||
|
||||
* **Fast processing**. It is fast enough to render on-demand in
|
||||
most web applications without having to cache the output.
|
||||
|
||||
* **Thread safety**. You can run multiple parsers in different
|
||||
goroutines without ill effect. There is no dependence on global
|
||||
shared state.
|
||||
|
||||
* **Minimal dependencies**. Blackfriday only depends on standard
|
||||
library packages in Go. The source code is pretty
|
||||
self-contained, so it is easy to add to any project, including
|
||||
Google App Engine projects.
|
||||
|
||||
* **Standards compliant**. Output successfully validates using the
|
||||
W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.
|
||||
|
||||
[this is a link](https://github.com/kataras/iris) `
|
||||
|
||||
// 10 seconds test
|
||||
// EXAMPLE: https://github.com/iris-contrib/examples/tree/master/cache_body
|
||||
func TestCacheBody(t *testing.T) {
|
||||
iris.ResetDefault()
|
||||
iris.Config.CacheGCDuration = time.Duration(2) * time.Second
|
||||
iris.Config.IsDevelopment = true
|
||||
defer iris.Close()
|
||||
var i = 1
|
||||
bodyHandler := func(ctx *iris.Context) {
|
||||
if i%2 == 0 { // only for testing
|
||||
ctx.SetStatusCode(iris.StatusNoContent)
|
||||
i++
|
||||
return
|
||||
}
|
||||
i++
|
||||
ctx.Markdown(iris.StatusOK, testMarkdownContents)
|
||||
}
|
||||
|
||||
expiration := time.Duration(3 * time.Second)
|
||||
|
||||
iris.Get("/", iris.Cache(bodyHandler, expiration))
|
||||
|
||||
e := httptest.New(iris.Default, t)
|
||||
|
||||
expectedBody := iris.SerializeToString("text/markdown", testMarkdownContents)
|
||||
|
||||
e.GET("/").Expect().Status(iris.StatusOK).Body().Equal(expectedBody)
|
||||
e.GET("/").Expect().Status(iris.StatusOK).Body().Equal(expectedBody) // the cache still son the corrrect body so no StatusNoContent fires
|
||||
time.Sleep(time.Duration(5) * time.Second) // 4 depends on the CacheGCDuration not the expiration
|
||||
|
||||
// the cache should be cleared and now i = 2 then it should run the iris.StatusNoContent with empty body ( we don't use the EmitError)
|
||||
e.GET("/").Expect().Status(iris.StatusNoContent).Body().Empty()
|
||||
time.Sleep(time.Duration(5) * time.Second)
|
||||
|
||||
e.GET("/").Expect().Status(iris.StatusOK).Body().Equal(expectedBody)
|
||||
e.GET("/").Expect().Status(iris.StatusOK).Body().Equal(expectedBody)
|
||||
}
|
||||
Reference in New Issue
Block a user