From 59e812b34007440d7dfc59e28adb9c2d49d8f2c1 Mon Sep 17 00:00:00 2001 From: Paul Hanyzewski Date: Sat, 29 Jul 2023 14:36:55 -0600 Subject: [PATCH 1/3] feat: on success return both internal and external ping data clean up branching/complexity --- connectivity/ping.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/connectivity/ping.go b/connectivity/ping.go index b448062..255bf56 100644 --- a/connectivity/ping.go +++ b/connectivity/ping.go @@ -70,20 +70,17 @@ func (p *pingCollector) Collect(ctx context.Context, pingAddrs []string) []Stati } wg.Wait() - if success { + // internal testing disabled, return external result only regardless of result + if p.addressInternal == "" { return []Statistics{externalPingResult} } - // internal testing disabled, return external result only - if !success && p.addressInternal == "" { - return []Statistics{externalPingResult} + // connectivity established, return result of both external and internal test result + if success { + return []Statistics{internalPingResult, externalPingResult} } - if internalSuccess { - log.Info("No external endpoint could be reached, internal gateway responding", "gateway address", p.addressInternal) - } else { - log.Info("No internal or external endpoint could be reached ", "gateway address", p.addressInternal) - } + log.Info("external endpoint unreachable", "internal-result", internalSuccess, "gateway-address", p.addressInternal) // external data needs to send last for tests to pingDownTimeDetect to work properly externalPingResult.SuccessInternal = internalSuccess From ac55a5119c2a29ee1878b1010f37b14087c872a9 Mon Sep 17 00:00:00 2001 From: Paul Hanyzewski Date: Sun, 30 Jul 2023 13:24:43 -0600 Subject: [PATCH 2/3] fix: ensure internal pinger can be disabled --- config/config.go | 8 +++++--- config/config_test.go | 44 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/config/config.go b/config/config.go index 3b5a8b2..62f4da0 100644 --- a/config/config.go +++ b/config/config.go @@ -214,15 +214,13 @@ func New() (Reloadable, error) { cfg.BlocklistedIPs = strings.Split(util.ValueOr(blocklistedIPs, "BLOCKLISTED_IPS", ""), ",") cfg.ConfigVersion = util.ValueOr(configVersion, "CONFIG_VERSION", "dev-preview") //todo: placeholder for reloadable configs cfg.Group = util.ValueOr(groupID, "GROUP_ID", "") - - cfg.PingAddressInternal = util.ValueOr(pingAddressInternal, "PING_ADDRESS_INTERNAL", cfg.discoverGateway()) cfg.LivenessCheckInAddress = util.ValueOr(livenessCheckInAddress, "IMUP_LIVENESS_CHECKIN_ADDRESS", fmt.Sprintf("%s/v1/realtime/livenesscheckin", ImUpAPIHost)) cfg.RealtimeAuthorized = util.ValueOr(realtimeAuthorized, "IMUP_REALTIME_AUTHORIZED", fmt.Sprintf("%s/v1/auth/realtimeAuthorized", ImUpAPIHost)) cfg.RealtimeConfig = util.ValueOr(realtimeConfig, "IMUP_REALTIME_CONFIG", fmt.Sprintf("%s/v1/realtime/config", ImUpAPIHost)) cfg.ShouldRunSpeedTestAddress = util.ValueOr(shouldRunSpeedTestAddress, "IMUP_SHOULD_RUN_SPEEDTEST_ADDRESS", fmt.Sprintf("%s/v1/realtime/shouldClientRunSpeedTest", ImUpAPIHost)) cfg.SpeedTestResultsAddress = util.ValueOr(speedTestResultsAddress, "IMUP_SPEED_TEST_RESULTS_ADDRESS", fmt.Sprintf("%s/v1/realtime/speedTestResults", ImUpAPIHost)) cfg.SpeedTestStatusUpdateAddress = util.ValueOr(speedTestStatusUpdateAddress, "IMUP_SPEED_TEST_STATUS_ADDRESS", fmt.Sprintf("%s/v1/realtime/speedTestStatusUpdate", ImUpAPIHost)) - + cfg.PingAddressInternal = util.ValueOr(pingAddressInternal, "PING_ADDRESS_INTERNAL", "") cfg.PingAddressesExternal = strings.Split(util.ValueOr(pingAddressesExternal, "PING_ADDRESS", "1.1.1.1/32,1.0.0.1/32,8.8.8.8/32,8.8.4.4/32"), ",") var err error @@ -279,6 +277,10 @@ func New() (Reloadable, error) { cfg.logLevel = util.LevelMap(verbosity, "VERBOSITY", "info") + if !cfg.NoDiscoverGateway && cfg.PingAddressInternal == "" { + cfg.PingAddressInternal = cfg.discoverGateway() + } + var w io.Writer if logFilePathStr != "" { w = logToThisFile(logFilePathStr) diff --git a/config/config_test.go b/config/config_test.go index 6cae961..b0623e5 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -181,3 +181,47 @@ func Test_LogPath(t *testing.T) { _, err = New() is.NoErr(err) } + +func Test_NoGatewayNoInternalPing(t *testing.T) { + is := is.New(t) + os.Clearenv() + os.Setenv("API_KEY", "ApiKey") + os.Setenv("EMAIL", "Email") + os.Setenv("HOST_ID", "HostID") + os.Setenv("PING_ADDRESS_INTERNAL", "") + os.Setenv("NO_GATEWAY_DISCOVERY", "true") + + defaultConfig, err := New() + is.NoErr(err) + + is.True(defaultConfig.InternalPingAddress() == "") +} + +func Test_InternalPingNoGateway(t *testing.T) { + is := is.New(t) + os.Clearenv() + os.Setenv("API_KEY", "ApiKey") + os.Setenv("EMAIL", "Email") + os.Setenv("HOST_ID", "HostID") + os.Setenv("PING_ADDRESS_INTERNAL", "1.2.3.4") + + defaultConfig, err := New() + is.NoErr(err) + + is.True(defaultConfig.InternalPingAddress() == "1.2.3.4") +} + +func Test_DefaultInternalNoGateway(t *testing.T) { + is := is.New(t) + os.Clearenv() + os.Setenv("API_KEY", "ApiKey") + os.Setenv("EMAIL", "Email") + os.Setenv("HOST_ID", "HostID") + os.Setenv("NO_GATEWAY_DISCOVERY", "true") + + defaultConfig, err := New() + is.NoErr(err) + + internal := defaultConfig.InternalPingAddress() + is.True(internal == "") +} From 6bc0e5cc4da144fbd44058f07c297181a44be204 Mon Sep 17 00:00:00 2001 From: Paul Hanyzewski Date: Sun, 30 Jul 2023 13:33:48 -0600 Subject: [PATCH 3/3] fix: ensure clean environmnet prior to running config tests --- config/config_test.go | 81 +++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/config/config_test.go b/config/config_test.go index b0623e5..11b0c08 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -12,10 +12,10 @@ import ( func Test_DefaultConfig(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") - os.Setenv("PING_ADDRESS_INTERNAL", "10.0.0.1") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") + t.Setenv("PING_ADDRESS_INTERNAL", "10.0.0.1") cfg, err := New() is.NoErr(err) @@ -57,10 +57,10 @@ func Test_DefaultConfig(t *testing.T) { func Test_ConfigReloadable(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") - os.Setenv("VERBOSITY", "debug") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") + t.Setenv("VERBOSITY", "debug") newConfig := &config{ PingEnabled: false, @@ -85,9 +85,9 @@ func Test_ConfigReloadable(t *testing.T) { func Test_ConfigReloadableThreadSafe(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") defaultConfig, err := New() is.NoErr(err) @@ -112,9 +112,9 @@ func Test_ConfigReloadableThreadSafe(t *testing.T) { func Test_RealtimeOnOff(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") defaultConfig, err := New() is.NoErr(err) @@ -143,10 +143,10 @@ func Test_RealtimeOnOff(t *testing.T) { func Test_ListedIPs(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") - os.Setenv("ALLOWLISTED_IPS", "10.0.0.0/28,192.168.1.1") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") + t.Setenv("ALLOWLISTED_IPS", "10.0.0.0/28,192.168.1.1") defaultConfig, err := New() is.NoErr(err) @@ -156,9 +156,9 @@ func Test_ListedIPs(t *testing.T) { func Test_PublicIP(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") defaultConfig, err := New() is.NoErr(err) @@ -170,13 +170,13 @@ func Test_PublicIP(t *testing.T) { func Test_LogPath(t *testing.T) { is := is.New(t) - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") - path, err := os.UserCacheDir() + path, err := os.UserHomeDir() is.NoErr(err) - os.Setenv("LOG_FILE_PATH", path) + t.Setenv("LOG_FILE_PATH", path) _, err = New() is.NoErr(err) @@ -184,12 +184,11 @@ func Test_LogPath(t *testing.T) { func Test_NoGatewayNoInternalPing(t *testing.T) { is := is.New(t) - os.Clearenv() - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") - os.Setenv("PING_ADDRESS_INTERNAL", "") - os.Setenv("NO_GATEWAY_DISCOVERY", "true") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") + t.Setenv("PING_ADDRESS_INTERNAL", "") + t.Setenv("NO_GATEWAY_DISCOVERY", "true") defaultConfig, err := New() is.NoErr(err) @@ -199,11 +198,10 @@ func Test_NoGatewayNoInternalPing(t *testing.T) { func Test_InternalPingNoGateway(t *testing.T) { is := is.New(t) - os.Clearenv() - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") - os.Setenv("PING_ADDRESS_INTERNAL", "1.2.3.4") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") + t.Setenv("PING_ADDRESS_INTERNAL", "1.2.3.4") defaultConfig, err := New() is.NoErr(err) @@ -213,11 +211,10 @@ func Test_InternalPingNoGateway(t *testing.T) { func Test_DefaultInternalNoGateway(t *testing.T) { is := is.New(t) - os.Clearenv() - os.Setenv("API_KEY", "ApiKey") - os.Setenv("EMAIL", "Email") - os.Setenv("HOST_ID", "HostID") - os.Setenv("NO_GATEWAY_DISCOVERY", "true") + t.Setenv("API_KEY", "ApiKey") + t.Setenv("EMAIL", "Email") + t.Setenv("HOST_ID", "HostID") + t.Setenv("NO_GATEWAY_DISCOVERY", "true") defaultConfig, err := New() is.NoErr(err)