mirror of
https://github.com/portainer/portainer.git
synced 2025-07-18 21:09:40 +02:00
This PR solves the issue that the Portainer instance will be always accessible in certain cases, like `restart: always` setting with docker run, even if the administrator is not created in the first 5 minutes. The solution is that the user will be redirected to a timeout page when any actions, such as refresh the page and click button, are made after administrator initialisation window(5 minutes) timeout.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package adminmonitor
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
i "github.com/portainer/portainer/api/internal/testhelpers"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_stopWithoutStarting(t *testing.T) {
|
|
monitor := New(1*time.Minute, nil, nil)
|
|
monitor.Stop()
|
|
}
|
|
|
|
func Test_stopCouldBeCalledMultipleTimes(t *testing.T) {
|
|
monitor := New(1*time.Minute, nil, nil)
|
|
monitor.Stop()
|
|
monitor.Stop()
|
|
}
|
|
|
|
func Test_startOrStopCouldBeCalledMultipleTimesConcurrently(t *testing.T) {
|
|
monitor := New(1*time.Minute, nil, context.Background())
|
|
|
|
go monitor.Start()
|
|
monitor.Start()
|
|
|
|
go monitor.Stop()
|
|
monitor.Stop()
|
|
|
|
time.Sleep(2 * time.Second)
|
|
}
|
|
|
|
func Test_canStopStartedMonitor(t *testing.T) {
|
|
monitor := New(1*time.Minute, nil, context.Background())
|
|
monitor.Start()
|
|
assert.NotNil(t, monitor.cancellationFunc, "cancellation function is missing in started monitor")
|
|
|
|
monitor.Stop()
|
|
assert.Nil(t, monitor.cancellationFunc, "cancellation function should absent in stopped monitor")
|
|
}
|
|
|
|
func Test_start_shouldDisableInstanceAfterTimeout_ifNotInitialized(t *testing.T) {
|
|
timeout := 10 * time.Millisecond
|
|
|
|
datastore := i.NewDatastore(i.WithUsers([]portainer.User{}))
|
|
monitor := New(timeout, datastore, context.Background())
|
|
monitor.Start()
|
|
|
|
<-time.After(20 * timeout)
|
|
assert.True(t, monitor.WasInstanceDisabled(), "monitor should have been timeout and instance is disabled")
|
|
}
|