mirror of
https://github.com/caddyserver/caddy.git
synced 2025-10-24 23:39:19 -04:00
Merged config and app packages into one called caddy. Abstracted away caddy startup functionality making it easier to embed Caddy in any Go application and use it as a library. Graceful restart (should) now ensure child starts properly. Now piping a gob bundle to child process so that the child can match up inherited listeners to server address. Much cleanup still to do.
185 lines
5.2 KiB
Go
185 lines
5.2 KiB
Go
package setup
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/mholt/caddy/middleware"
|
|
"github.com/mholt/caddy/middleware/markdown"
|
|
)
|
|
|
|
func TestMarkdown(t *testing.T) {
|
|
|
|
c := NewTestController(`markdown /blog`)
|
|
|
|
mid, err := Markdown(c)
|
|
|
|
if err != nil {
|
|
t.Errorf("Expected no errors, got: %v", err)
|
|
}
|
|
|
|
if mid == nil {
|
|
t.Fatal("Expected middleware, was nil instead")
|
|
}
|
|
|
|
handler := mid(EmptyNext)
|
|
myHandler, ok := handler.(markdown.Markdown)
|
|
|
|
if !ok {
|
|
t.Fatalf("Expected handler to be type Markdown, got: %#v", handler)
|
|
}
|
|
|
|
if myHandler.Configs[0].PathScope != "/blog" {
|
|
t.Errorf("Expected /blog as the Path Scope")
|
|
}
|
|
if fmt.Sprint(myHandler.Configs[0].Extensions) != fmt.Sprint([]string{".md"}) {
|
|
t.Errorf("Expected .md as the Default Extension")
|
|
}
|
|
}
|
|
|
|
func TestMarkdownStaticGen(t *testing.T) {
|
|
c := NewTestController(`markdown /blog {
|
|
ext .md
|
|
template tpl_with_include.html
|
|
sitegen
|
|
}`)
|
|
|
|
c.Root = "./testdata"
|
|
mid, err := Markdown(c)
|
|
|
|
if err != nil {
|
|
t.Errorf("Expected no errors, got: %v", err)
|
|
}
|
|
|
|
if mid == nil {
|
|
t.Fatal("Expected middleware, was nil instead")
|
|
}
|
|
|
|
for _, start := range c.Startup {
|
|
err := start()
|
|
if err != nil {
|
|
t.Errorf("Startup error: %v", err)
|
|
}
|
|
}
|
|
|
|
next := middleware.HandlerFunc(func(w http.ResponseWriter, r *http.Request) (int, error) {
|
|
t.Fatalf("Next shouldn't be called")
|
|
return 0, nil
|
|
})
|
|
hndlr := mid(next)
|
|
mkdwn, ok := hndlr.(markdown.Markdown)
|
|
if !ok {
|
|
t.Fatalf("Was expecting a markdown.Markdown but got %T", hndlr)
|
|
}
|
|
|
|
expectedStaticFiles := map[string]string{"/blog/first_post.md": "testdata/generated_site/blog/first_post.md/index.html"}
|
|
if fmt.Sprint(expectedStaticFiles) != fmt.Sprint(mkdwn.Configs[0].StaticFiles) {
|
|
t.Fatalf("Test expected StaticFiles to be %s, but got %s",
|
|
fmt.Sprint(expectedStaticFiles), fmt.Sprint(mkdwn.Configs[0].StaticFiles))
|
|
}
|
|
|
|
filePath := "testdata/generated_site/blog/first_post.md/index.html"
|
|
if _, err := os.Stat(filePath); err != nil {
|
|
t.Fatalf("An error occured when getting the file information: %v", err)
|
|
}
|
|
|
|
html, err := ioutil.ReadFile(filePath)
|
|
if err != nil {
|
|
t.Fatalf("An error occured when getting the file content: %v", err)
|
|
}
|
|
|
|
expectedBody := []byte(`<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>first_post</title>
|
|
</head>
|
|
<body>
|
|
<h1>Header title</h1>
|
|
|
|
<h1>Test h1</h1>
|
|
|
|
</body>
|
|
</html>
|
|
`)
|
|
|
|
if !bytes.Equal(html, expectedBody) {
|
|
t.Fatalf("Expected file content: %s got: %s", string(expectedBody), string(html))
|
|
}
|
|
|
|
fp := filepath.Join(c.Root, markdown.DefaultStaticDir)
|
|
if err = os.RemoveAll(fp); err != nil {
|
|
t.Errorf("Error while removing the generated static files: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestMarkdownParse(t *testing.T) {
|
|
tests := []struct {
|
|
inputMarkdownConfig string
|
|
shouldErr bool
|
|
expectedMarkdownConfig []markdown.Config
|
|
}{
|
|
|
|
{`markdown /blog {
|
|
ext .md .txt
|
|
css /resources/css/blog.css
|
|
js /resources/js/blog.js
|
|
}`, false, []markdown.Config{{
|
|
PathScope: "/blog",
|
|
Extensions: []string{".md", ".txt"},
|
|
Styles: []string{"/resources/css/blog.css"},
|
|
Scripts: []string{"/resources/js/blog.js"},
|
|
}}},
|
|
{`markdown /blog {
|
|
ext .md
|
|
template tpl_with_include.html
|
|
sitegen
|
|
}`, false, []markdown.Config{{
|
|
PathScope: "/blog",
|
|
Extensions: []string{".md"},
|
|
Templates: map[string]string{markdown.DefaultTemplate: "testdata/tpl_with_include.html"},
|
|
StaticDir: markdown.DefaultStaticDir,
|
|
}}},
|
|
}
|
|
for i, test := range tests {
|
|
c := NewTestController(test.inputMarkdownConfig)
|
|
c.Root = "./testdata"
|
|
actualMarkdownConfigs, err := markdownParse(c)
|
|
|
|
if err == nil && test.shouldErr {
|
|
t.Errorf("Test %d didn't error, but it should have", i)
|
|
} else if err != nil && !test.shouldErr {
|
|
t.Errorf("Test %d errored, but it shouldn't have; got '%v'", i, err)
|
|
}
|
|
if len(actualMarkdownConfigs) != len(test.expectedMarkdownConfig) {
|
|
t.Fatalf("Test %d expected %d no of WebSocket configs, but got %d ",
|
|
i, len(test.expectedMarkdownConfig), len(actualMarkdownConfigs))
|
|
}
|
|
for j, actualMarkdownConfig := range actualMarkdownConfigs {
|
|
|
|
if actualMarkdownConfig.PathScope != test.expectedMarkdownConfig[j].PathScope {
|
|
t.Errorf("Test %d expected %dth Markdown PathScope to be %s , but got %s",
|
|
i, j, test.expectedMarkdownConfig[j].PathScope, actualMarkdownConfig.PathScope)
|
|
}
|
|
|
|
if fmt.Sprint(actualMarkdownConfig.Styles) != fmt.Sprint(test.expectedMarkdownConfig[j].Styles) {
|
|
t.Errorf("Test %d expected %dth Markdown Config Styles to be %s , but got %s",
|
|
i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Styles), fmt.Sprint(actualMarkdownConfig.Styles))
|
|
}
|
|
if fmt.Sprint(actualMarkdownConfig.Scripts) != fmt.Sprint(test.expectedMarkdownConfig[j].Scripts) {
|
|
t.Errorf("Test %d expected %dth Markdown Config Scripts to be %s , but got %s",
|
|
i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Scripts), fmt.Sprint(actualMarkdownConfig.Scripts))
|
|
}
|
|
if fmt.Sprint(actualMarkdownConfig.Templates) != fmt.Sprint(test.expectedMarkdownConfig[j].Templates) {
|
|
t.Errorf("Test %d expected %dth Markdown Config Templates to be %s , but got %s",
|
|
i, j, fmt.Sprint(test.expectedMarkdownConfig[j].Templates), fmt.Sprint(actualMarkdownConfig.Templates))
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|