@@ -13,11 +13,15 @@ package coordinator
13
13
import (
14
14
"context"
15
15
"errors"
16
+ "fmt"
16
17
"net"
18
+ "sync"
17
19
"testing"
18
20
"time"
19
21
20
22
"github.com/elastic/elastic-agent-client/v7/pkg/proto"
23
+ "github.com/elastic/elastic-agent/internal/pkg/fleetapi"
24
+ "github.com/elastic/elastic-agent/internal/pkg/fleetapi/acker"
21
25
22
26
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status"
23
27
"go.opentelemetry.io/collector/component/componentstatus"
@@ -30,8 +34,10 @@ import (
30
34
"github.com/elastic/elastic-agent-libs/logp"
31
35
"github.com/elastic/elastic-agent/internal/pkg/agent/application/info"
32
36
"github.com/elastic/elastic-agent/internal/pkg/agent/application/monitoring/reload"
37
+ "github.com/elastic/elastic-agent/internal/pkg/agent/application/reexec"
33
38
"github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade"
34
39
"github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact"
40
+ upgradeErrors "github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/artifact/download/errors"
35
41
"github.com/elastic/elastic-agent/internal/pkg/agent/application/upgrade/details"
36
42
"github.com/elastic/elastic-agent/internal/pkg/agent/transpiler"
37
43
"github.com/elastic/elastic-agent/internal/pkg/config"
@@ -1569,3 +1575,100 @@ func (fs *fakeMonitoringServer) Reset() {
1569
1575
func (fs * fakeMonitoringServer ) Addr () net.Addr {
1570
1576
return nil
1571
1577
}
1578
+
1579
+ type mockUpgradeManager struct {
1580
+ upgradeErr error
1581
+ }
1582
+
1583
+ func (m * mockUpgradeManager ) Upgradeable () bool {
1584
+ return true
1585
+ }
1586
+
1587
+ func (m * mockUpgradeManager ) Reload (cfg * config.Config ) error {
1588
+ return nil
1589
+ }
1590
+
1591
+ 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 ) {
1592
+ return nil , m .upgradeErr
1593
+ }
1594
+
1595
+ func (m * mockUpgradeManager ) Ack (ctx context.Context , acker acker.Acker ) error {
1596
+ return nil
1597
+ }
1598
+
1599
+ func (m * mockUpgradeManager ) AckAction (ctx context.Context , acker acker.Acker , action fleetapi.Action ) error {
1600
+ return nil
1601
+ }
1602
+
1603
+ func (m * mockUpgradeManager ) MarkerWatcher () upgrade.MarkerWatcher {
1604
+ return nil
1605
+ }
1606
+
1607
+ func TestCoordinator_Upgrade_InsufficientDiskSpaceError (t * testing.T ) {
1608
+ log , _ := loggertest .New ("coordinator-insufficient-disk-space-test" )
1609
+
1610
+ mockUpgradeManager := & mockUpgradeManager {
1611
+ upgradeErr : fmt .Errorf ("wrapped: %w" , upgradeErrors .ErrInsufficientDiskSpace ),
1612
+ }
1613
+
1614
+ initialState := State {
1615
+ CoordinatorState : agentclient .Healthy ,
1616
+ CoordinatorMessage : "Running" ,
1617
+ }
1618
+
1619
+ coord := & Coordinator {
1620
+ state : initialState ,
1621
+ logger : log ,
1622
+ upgradeMgr : mockUpgradeManager ,
1623
+ stateBroadcaster : broadcaster .New (initialState , 64 , 32 ),
1624
+ overrideStateChan : make (chan * coordinatorOverrideState ),
1625
+ upgradeDetailsChan : make (chan * details.Details ),
1626
+ }
1627
+
1628
+ wg := sync.WaitGroup {}
1629
+ wg .Add (2 )
1630
+
1631
+ overrideStates := []agentclient.State {}
1632
+ go func () {
1633
+ state1 := <- coord .overrideStateChan
1634
+ overrideStates = append (overrideStates , state1 .state )
1635
+
1636
+ state2 := <- coord .overrideStateChan
1637
+ if state2 != nil {
1638
+ overrideStates = append (overrideStates , state2 .state )
1639
+ }
1640
+
1641
+ wg .Done ()
1642
+ }()
1643
+
1644
+ upgradeDetails := []* details.Details {}
1645
+ go func () {
1646
+ upgradeDetails = append (upgradeDetails , <- coord .upgradeDetailsChan )
1647
+ upgradeDetails = append (upgradeDetails , <- coord .upgradeDetailsChan )
1648
+ wg .Done ()
1649
+ }()
1650
+
1651
+ err := coord .Upgrade (t .Context (), "" , "" , nil )
1652
+ require .Error (t , err )
1653
+ require .Equal (t , err , upgradeErrors .ErrInsufficientDiskSpace )
1654
+
1655
+ wg .Wait ()
1656
+
1657
+ require .Equal (t , []agentclient.State {agentclient .Upgrading }, overrideStates )
1658
+
1659
+ require .Equal (t , []* details.Details {
1660
+ {
1661
+ TargetVersion : "" ,
1662
+ State : details .StateRequested ,
1663
+ ActionID : "" ,
1664
+ },
1665
+ {
1666
+ TargetVersion : "" ,
1667
+ State : details .StateFailed ,
1668
+ Metadata : details.Metadata {
1669
+ FailedState : details .StateRequested ,
1670
+ ErrorMsg : upgradeErrors .ErrInsufficientDiskSpace .Error (),
1671
+ },
1672
+ },
1673
+ }, upgradeDetails )
1674
+ }
0 commit comments