mediamtx/internal/certloader/certloader_test.go
Dan Bason 1055be99c0
automatically reload TLS certificates when they change (#3598)
* Dynamically refresh tls certs for all servers

* make sure that CertLoader is always closed

---------

Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com>
2024-08-04 14:12:08 +02:00

52 lines
1.2 KiB
Go

package certloader
import (
"crypto/tls"
"os"
"testing"
"time"
"github.com/bluenviron/mediamtx/internal/test"
"github.com/stretchr/testify/require"
)
func TestCertReload(t *testing.T) {
testData, err := tls.X509KeyPair(test.TLSCertPub, test.TLSCertKey)
require.NoError(t, err)
serverCertPath, err := test.CreateTempFile(test.TLSCertPub)
require.NoError(t, err)
defer os.Remove(serverCertPath)
serverKeyPath, err := test.CreateTempFile(test.TLSCertKey)
require.NoError(t, err)
defer os.Remove(serverKeyPath)
loader, err := New(serverCertPath, serverKeyPath, test.NilLogger)
require.NoError(t, err)
defer loader.Close()
getCert := loader.GetCertificate()
require.NotNil(t, getCert)
cert, err := getCert(nil)
require.NoError(t, err)
require.NotNil(t, cert)
require.Equal(t, &testData, cert)
testData, err = tls.X509KeyPair(test.TLSCertPubAlt, test.TLSCertKeyAlt)
require.NoError(t, err)
err = os.WriteFile(serverCertPath, test.TLSCertPubAlt, 0o644)
require.NoError(t, err)
err = os.WriteFile(serverKeyPath, test.TLSCertKeyAlt, 0o644)
require.NoError(t, err)
time.Sleep(1 * time.Second)
cert, err = getCert(nil)
require.NoError(t, err)
require.NotNil(t, cert)
require.Equal(t, &testData, cert)
}