package engine import ( "html/template" "net/http/httptest" "os" "testing" "time" "github.com/xyproto/algernon/lua/pool" "github.com/xyproto/algernon/utils" "github.com/xyproto/datablock" ) func pongoPageTest(n int, t *testing.T) { req := httptest.NewRequest("GET", "/", nil) w := httptest.NewRecorder() filename := "testdata/index.po2" luafilename := "testdata/data.lua" pongodata, err := os.ReadFile(filename) if err != nil { t.Fatalf("Failed reading file: %s", err) } ac, err := New("Algernon 123", "Just a test") if err != nil { t.Fatalf("Failed creating new Algernon instance: %s", err) } // Use a FileStat cache with different settings ac.SetFileStatCache(datablock.NewFileStat(true, time.Minute*1)) ac.cache = datablock.NewFileCache(20000000, true, 64*utils.KiB, true, 0) luablock, err := ac.cache.Read(luafilename, ac.shouldCache(".po2")) if err != nil { t.Fatalf("Failed reading Lua file from cache: %s", err) } // luablock can be empty if there was an error or if the file was empty if !luablock.HasData() { t.Fatal("Lua block does not have data") } // Lua LState pool ac.luapool = pool.New() defer ac.luapool.Shutdown() // Make functions from the given Lua data available errChan := make(chan error) funcMapChan := make(chan template.FuncMap) go ac.Lua2funcMap(w, req, filename, luafilename, ".lua", errChan, funcMapChan) funcs := <-funcMapChan err = <-errChan if err != nil { t.Fatalf("Error with Lua2funcMap: %s", err) } // Trigger the error (now resolved) for i := 0; i < n; i++ { go ac.PongoPage(w, req, filename, pongodata, funcs) } } func TestPongoPage(t *testing.T) { pongoPageTest(1, t) } //func TestConcurrentPongoPage1(t *testing.T) { // pongoPageTest(10, t) //} // //func TestConcurrentPongoPage2(t *testing.T) { // for i := 0; i < 10; i++ { // go pongoPageTest(1, t) // } //} // //func TestConcurrentPongoPage3(t *testing.T) { // for i := 0; i < 10; i++ { // go pongoPageTest(10, t) // } //} // //func TestConcurrentPongoPage4(t *testing.T) { // for i := 0; i < 1000; i++ { // go pongoPageTest(1000, t) // } //}