Skip to content

Commit 5a4ed2a

Browse files
author
Kaan Yalti
committed
enhancement(5235): added coordinator tests for insufficient disk space error
enhancement(5235): updated error in test
1 parent d5bd21f commit 5a4ed2a

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

internal/pkg/agent/application/coordinator/coordinator_unit_test.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,19 @@ import (
1515
"context"
1616
"encoding/json"
1717
"errors"
18+
"fmt"
1819
"net"
1920
"net/http"
2021
"net/http/httptest"
2122
"os"
2223
"path/filepath"
2324
"strings"
25+
"sync"
2426
"testing"
2527
"time"
2628

2729
"github.com/elastic/elastic-agent-client/v7/pkg/proto"
30+
"github.com/elastic/elastic-agent/internal/pkg/fleetapi/acker"
2831
"github.com/elastic/elastic-agent/internal/pkg/testutils"
2932

3033
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status"
@@ -41,9 +44,11 @@ import (
4144
"github.com/elastic/elastic-agent/internal/pkg/agent/application/info"
4245
"github.com/elastic/elastic-agent/internal/pkg/agent/application/monitoring/reload"
4346
"github.com/elastic/elastic-agent/internal/pkg/agent/application/paths"
47+
"github.com/elastic/elastic-agent/internal/pkg/agent/application/reexec"
4448
"github.com/elastic/elastic-agent/internal/pkg/agent/application/secret"
4549
"github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade"
4650
"github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact"
51+
upgradeErrors "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact/download/errors"
4752
"github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details"
4853
"github.com/elastic/elastic-agent/internal/pkg/agent/configuration"
4954
"github.com/elastic/elastic-agent/internal/pkg/agent/storage"
@@ -1981,3 +1986,100 @@ func TestHasEndpoint(t *testing.T) {
19811986
})
19821987
}
19831988
}
1989+
1990+
type mockUpgradeManager struct {
1991+
upgradeErr error
1992+
}
1993+
1994+
func (m *mockUpgradeManager) Upgradeable() bool {
1995+
return true
1996+
}
1997+
1998+
func (m *mockUpgradeManager) Reload(cfg *config.Config) error {
1999+
return nil
2000+
}
2001+
2002+
func (m *mockUpgradeManager) Upgrade(ctx context.Context, version string, sourceURI string, action *fleetapi.ActionUpgrade, details *details.Details, skipVerifyOverride bool, skipDefaultPgp bool, pgpBytes ...string) (_ reexec.ShutdownCallbackFn, err error) {
2003+
return nil, m.upgradeErr
2004+
}
2005+
2006+
func (m *mockUpgradeManager) Ack(ctx context.Context, acker acker.Acker) error {
2007+
return nil
2008+
}
2009+
2010+
func (m *mockUpgradeManager) AckAction(ctx context.Context, acker acker.Acker, action fleetapi.Action) error {
2011+
return nil
2012+
}
2013+
2014+
func (m *mockUpgradeManager) MarkerWatcher() upgrade.MarkerWatcher {
2015+
return nil
2016+
}
2017+
2018+
func TestCoordinator_Upgrade_InsufficientDiskSpaceError(t *testing.T) {
2019+
log, _ := loggertest.New("coordinator-insufficient-disk-space-test")
2020+
2021+
mockUpgradeManager := &mockUpgradeManager{
2022+
upgradeErr: fmt.Errorf("wrapped: %w", upgradeErrors.ErrInsufficientDiskSpace),
2023+
}
2024+
2025+
initialState := State{
2026+
CoordinatorState: agentclient.Healthy,
2027+
CoordinatorMessage: "Running",
2028+
}
2029+
2030+
coord := &Coordinator{
2031+
state: initialState,
2032+
logger: log,
2033+
upgradeMgr: mockUpgradeManager,
2034+
stateBroadcaster: broadcaster.New(initialState, 64, 32),
2035+
overrideStateChan: make(chan *coordinatorOverrideState),
2036+
upgradeDetailsChan: make(chan *details.Details),
2037+
}
2038+
2039+
wg := sync.WaitGroup{}
2040+
wg.Add(2)
2041+
2042+
overrideStates := []agentclient.State{}
2043+
go func() {
2044+
state1 := <-coord.overrideStateChan
2045+
overrideStates = append(overrideStates, state1.state)
2046+
2047+
state2 := <-coord.overrideStateChan
2048+
if state2 != nil {
2049+
overrideStates = append(overrideStates, state2.state)
2050+
}
2051+
2052+
wg.Done()
2053+
}()
2054+
2055+
upgradeDetails := []*details.Details{}
2056+
go func() {
2057+
upgradeDetails = append(upgradeDetails, <-coord.upgradeDetailsChan)
2058+
upgradeDetails = append(upgradeDetails, <-coord.upgradeDetailsChan)
2059+
wg.Done()
2060+
}()
2061+
2062+
err := coord.Upgrade(t.Context(), "", "", nil, false, false)
2063+
require.Error(t, err)
2064+
require.Equal(t, err, upgradeErrors.ErrInsufficientDiskSpace)
2065+
2066+
wg.Wait()
2067+
2068+
require.Equal(t, []agentclient.State{agentclient.Upgrading}, overrideStates)
2069+
2070+
require.Equal(t, []*details.Details{
2071+
{
2072+
TargetVersion: "",
2073+
State: details.StateRequested,
2074+
ActionID: "",
2075+
},
2076+
{
2077+
TargetVersion: "",
2078+
State: details.StateFailed,
2079+
Metadata: details.Metadata{
2080+
FailedState: details.StateRequested,
2081+
ErrorMsg: upgradeErrors.ErrInsufficientDiskSpace.Error(),
2082+
},
2083+
},
2084+
}, upgradeDetails)
2085+
}

0 commit comments

Comments
 (0)