* Basic setup to serve HTTPS * Correctly handle the case of missing TLS configs * Documenting TLS * Refactor TLS configuration setup * Add TLS Encryption section again to README * Extending TOC in README * Moving TLS settings to subsection of web settings * Adding tests for config/web * Add test for handling TLS * Rename some variables as suggested * Corrected error formatting * Update test module import * Polishing the readme file * Error handling for TLSConfig() --------- Co-authored-by: TwiN <twin@linux.com>
92 lines
2.2 KiB
Go
92 lines
2.2 KiB
Go
package controller
|
|
|
|
import (
|
|
"math/rand"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/TwiN/gatus/v5/config"
|
|
"github.com/TwiN/gatus/v5/config/web"
|
|
"github.com/TwiN/gatus/v5/core"
|
|
"github.com/TwiN/gatus/v5/test"
|
|
)
|
|
|
|
func TestHandle(t *testing.T) {
|
|
cfg := &config.Config{
|
|
Web: &web.Config{
|
|
Address: "0.0.0.0",
|
|
Port: rand.Intn(65534),
|
|
},
|
|
Endpoints: []*core.Endpoint{
|
|
{
|
|
Name: "frontend",
|
|
Group: "core",
|
|
},
|
|
{
|
|
Name: "backend",
|
|
Group: "core",
|
|
},
|
|
},
|
|
}
|
|
_ = os.Setenv("ROUTER_TEST", "true")
|
|
_ = os.Setenv("ENVIRONMENT", "dev")
|
|
defer os.Clearenv()
|
|
Handle(cfg)
|
|
defer Shutdown()
|
|
request, _ := http.NewRequest("GET", "/health", http.NoBody)
|
|
responseRecorder := httptest.NewRecorder()
|
|
server.Handler.ServeHTTP(responseRecorder, request)
|
|
if responseRecorder.Code != http.StatusOK {
|
|
t.Error("expected GET /health to return status code 200")
|
|
}
|
|
if server == nil {
|
|
t.Fatal("server should've been set (but because we set ROUTER_TEST, it shouldn't have been started)")
|
|
}
|
|
}
|
|
|
|
func TestHandleTls(t *testing.T) {
|
|
privateKeyPath, publicKeyPath := test.UnsafeSelfSignedCertificates(t.TempDir())
|
|
cfg := &config.Config{
|
|
Web: &web.Config{
|
|
Address: "0.0.0.0",
|
|
Port: rand.Intn(65534),
|
|
Tls: (web.TLSConfig{CertificateFile: publicKeyPath, PrivateKeyFile: privateKeyPath}),
|
|
},
|
|
Endpoints: []*core.Endpoint{
|
|
{
|
|
Name: "frontend",
|
|
Group: "core",
|
|
},
|
|
{
|
|
Name: "backend",
|
|
Group: "core",
|
|
},
|
|
},
|
|
}
|
|
_ = os.Setenv("ROUTER_TEST", "true")
|
|
_ = os.Setenv("ENVIRONMENT", "dev")
|
|
defer os.Clearenv()
|
|
Handle(cfg)
|
|
defer Shutdown()
|
|
request, _ := http.NewRequest("GET", "/health", http.NoBody)
|
|
responseRecorder := httptest.NewRecorder()
|
|
server.Handler.ServeHTTP(responseRecorder, request)
|
|
if responseRecorder.Code != http.StatusOK {
|
|
t.Error("expected GET /health to return status code 200")
|
|
}
|
|
if server == nil {
|
|
t.Fatal("server should've been set (but because we set ROUTER_TEST, it shouldn't have been started)")
|
|
}
|
|
}
|
|
|
|
func TestShutdown(t *testing.T) {
|
|
// Pretend that we called controller.Handle(), which initializes the server variable
|
|
server = &http.Server{}
|
|
Shutdown()
|
|
if server != nil {
|
|
t.Error("server should've been shut down")
|
|
}
|
|
}
|