mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-21 02:30:14 +00:00
test(agentcompat): add dashboard runtime harness
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
//go:build linux
|
||||
|
||||
package dashboard
|
||||
|
||||
import (
|
||||
"context"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/nezhahq/nezha/integration/agentcompat/internal/testpaths"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestDashboardRestart_PreservesFixtureIdentityAndCleansGenerations(t *testing.T) {
|
||||
// Given
|
||||
sourceDir, err := testpaths.NezhaSource(t.Name())
|
||||
require.NoError(t, err)
|
||||
dashboard, err := Start(t.Context(), StartConfig{SourceDir: sourceDir, EnableTLS: true, ReceiptGate: true})
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() {
|
||||
cleanupContext, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
||||
defer cancel()
|
||||
require.NoError(t, dashboard.Close(cleanupContext))
|
||||
})
|
||||
fixture := dashboard.FixtureIdentity()
|
||||
firstRuntime := dashboard.RuntimeIdentity()
|
||||
require.NotZero(t, fixture.HTTP.Inode)
|
||||
require.NotZero(t, fixture.HTTPS.Inode)
|
||||
|
||||
// When
|
||||
stopContext, cancel := context.WithTimeout(t.Context(), 15*time.Second)
|
||||
defer cancel()
|
||||
_, err = dashboard.StopProcess(stopContext)
|
||||
require.NoError(t, err)
|
||||
firstPID := firstRuntime.PID
|
||||
_, err = dashboard.StartProcess(stopContext)
|
||||
require.NoError(t, err)
|
||||
secondRuntime := dashboard.RuntimeIdentity()
|
||||
|
||||
// Then
|
||||
require.Equal(t, fixture, dashboard.FixtureIdentity())
|
||||
require.NotEqual(t, firstRuntime.PID, secondRuntime.PID)
|
||||
require.Greater(t, secondRuntime.Generation, firstRuntime.Generation)
|
||||
require.Equal(t, fixture.HTTP.Address, dashboard.Endpoint())
|
||||
require.Equal(t, fixture.HTTP, dashboard.FixtureIdentity().HTTP)
|
||||
require.Equal(t, fixture.HTTPS, dashboard.FixtureIdentity().HTTPS)
|
||||
require.FileExists(t, fixture.DatabasePath)
|
||||
require.FileExists(t, fixture.ConfigPath)
|
||||
require.NoError(t, dashboard.Close(stopContext))
|
||||
require.Len(t, dashboard.CleanupReceipt().Processes, 2)
|
||||
require.NoFileExists(t, filepath.Join("/proc", strconv.Itoa(firstPID)))
|
||||
require.NoDirExists(t, fixture.WorkspaceRoot)
|
||||
}
|
||||
Reference in New Issue
Block a user