mirror of
https://github.com/caddyserver/caddy.git
synced 2026-07-02 06:42:40 +00:00
Biggest change is no longer using standard library's tls.Config.getCertificate function to get a certificate during TLS handshake. Implemented our own cache which can be changed dynamically at runtime, even during TLS handshakes. As such, restarts are no longer required after certificate renewals or OCSP updates. We also allow loading multiple certificates and keys per host, even by specifying a directory (tls got a new 'load' command for that). Renamed the letsencrypt package to https in a gradual effort to become more generic; and https is more fitting for what the package does now. There are still some known bugs, e.g. reloading where a new certificate is required but port 80 isn't currently listening, will cause the challenge to fail. There's still plenty of cleanup to do and tests to write. It is especially confusing right now how we enable "on-demand" TLS during setup and keep track of that. But this change should basically work so far.
88 lines
3.4 KiB
Go
88 lines
3.4 KiB
Go
package https
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestStorage(t *testing.T) {
|
|
storage = Storage("./le_test")
|
|
|
|
if expected, actual := filepath.Join("le_test", "sites"), storage.Sites(); actual != expected {
|
|
t.Errorf("Expected Sites() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "sites", "test.com"), storage.Site("test.com"); actual != expected {
|
|
t.Errorf("Expected Site() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "sites", "test.com", "test.com.crt"), storage.SiteCertFile("test.com"); actual != expected {
|
|
t.Errorf("Expected SiteCertFile() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "sites", "test.com", "test.com.key"), storage.SiteKeyFile("test.com"); actual != expected {
|
|
t.Errorf("Expected SiteKeyFile() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "sites", "test.com", "test.com.json"), storage.SiteMetaFile("test.com"); actual != expected {
|
|
t.Errorf("Expected SiteMetaFile() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "users"), storage.Users(); actual != expected {
|
|
t.Errorf("Expected Users() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "users", "me@example.com"), storage.User("me@example.com"); actual != expected {
|
|
t.Errorf("Expected User() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "users", "me@example.com", "me.json"), storage.UserRegFile("me@example.com"); actual != expected {
|
|
t.Errorf("Expected UserRegFile() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "users", "me@example.com", "me.key"), storage.UserKeyFile("me@example.com"); actual != expected {
|
|
t.Errorf("Expected UserKeyFile() to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
|
|
// Test with empty emails
|
|
if expected, actual := filepath.Join("le_test", "users", emptyEmail), storage.User(emptyEmail); actual != expected {
|
|
t.Errorf("Expected User(\"\") to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "users", emptyEmail, emptyEmail+".json"), storage.UserRegFile(""); actual != expected {
|
|
t.Errorf("Expected UserRegFile(\"\") to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
if expected, actual := filepath.Join("le_test", "users", emptyEmail, emptyEmail+".key"), storage.UserKeyFile(""); actual != expected {
|
|
t.Errorf("Expected UserKeyFile(\"\") to return '%s' but got '%s'", expected, actual)
|
|
}
|
|
}
|
|
|
|
func TestEmailUsername(t *testing.T) {
|
|
for i, test := range []struct {
|
|
input, expect string
|
|
}{
|
|
{
|
|
input: "username@example.com",
|
|
expect: "username",
|
|
},
|
|
{
|
|
input: "plus+addressing@example.com",
|
|
expect: "plus+addressing",
|
|
},
|
|
{
|
|
input: "me+plus-addressing@example.com",
|
|
expect: "me+plus-addressing",
|
|
},
|
|
{
|
|
input: "not-an-email",
|
|
expect: "not-an-email",
|
|
},
|
|
{
|
|
input: "@foobar.com",
|
|
expect: "foobar.com",
|
|
},
|
|
{
|
|
input: emptyEmail,
|
|
expect: emptyEmail,
|
|
},
|
|
{
|
|
input: "",
|
|
expect: "",
|
|
},
|
|
} {
|
|
if actual := emailUsername(test.input); actual != test.expect {
|
|
t.Errorf("Test %d: Expected username to be '%s' but was '%s'", i, test.expect, actual)
|
|
}
|
|
}
|
|
}
|