github.com/argoproj/argo-cd/v3@v3.2.1/test/e2e/graceful_restart_test.go (about)

     1  package e2e
     2  
     3  import (
     4  	"net/http"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/argoproj/argo-cd/v3/pkg/apiclient/settings"
    12  	"github.com/argoproj/argo-cd/v3/test/e2e/fixture"
    13  )
    14  
    15  func checkHealth(t *testing.T, requireHealthy bool) {
    16  	t.Helper()
    17  	resp, err := fixture.DoHttpRequest("GET", "/healthz?full=true", "")
    18  	if requireHealthy {
    19  		require.NoError(t, err)
    20  		require.Equal(t, http.StatusOK, resp.StatusCode)
    21  	} else {
    22  		if err != nil {
    23  			if !strings.Contains(err.Error(), "connection refused") && !strings.Contains(err.Error(), "connection reset by peer") {
    24  				require.NoErrorf(t, err, "If an error returned, it must be about connection refused or reset by peer")
    25  			}
    26  		} else {
    27  			require.Contains(t, []int{http.StatusOK, http.StatusServiceUnavailable}, resp.StatusCode)
    28  		}
    29  	}
    30  }
    31  
    32  func TestAPIServerGracefulRestart(t *testing.T) {
    33  	fixture.EnsureCleanState(t)
    34  
    35  	// Should be healthy.
    36  	checkHealth(t, true)
    37  	// Should trigger API server restart.
    38  	require.NoError(t, fixture.SetParamInSettingConfigMap("url", "http://test-api-server-graceful-restart"))
    39  
    40  	// Wait for ~5 seconds
    41  	for i := 0; i < 50; i++ {
    42  		checkHealth(t, false)
    43  		time.Sleep(100 * time.Millisecond)
    44  	}
    45  	// One final time, should be healthy, or restart is considered too slow for tests
    46  	checkHealth(t, true)
    47  	closer, settingsClient, err := fixture.ArgoCDClientset.NewSettingsClient()
    48  	if closer != nil {
    49  		defer closer.Close()
    50  	}
    51  	require.NoError(t, err)
    52  	settings, err := settingsClient.Get(t.Context(), &settings.SettingsQuery{})
    53  	require.NoError(t, err)
    54  	require.Equal(t, "http://test-api-server-graceful-restart", settings.URL)
    55  }