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 }