@@ -51,7 +51,7 @@ func TestFleetManagedUpgradeUnprivileged(t *testing.T) {
5151 Local : false , // requires Agent installation
5252 Sudo : true , // requires Agent installation
5353 })
54- testFleetManagedUpgrade (t , info , true )
54+ testFleetManagedUpgrade (t , info , true , false )
5555}
5656
5757// TestFleetManagedUpgradePrivileged tests that the build under test can retrieve an action from
@@ -65,16 +65,63 @@ func TestFleetManagedUpgradePrivileged(t *testing.T) {
6565 Local : false , // requires Agent installation
6666 Sudo : true , // requires Agent installation
6767 })
68- testFleetManagedUpgrade (t , info , false )
68+ testFleetManagedUpgrade (t , info , false , false )
6969}
7070
71- func testFleetManagedUpgrade (t * testing.T , info * define.Info , unprivileged bool ) {
71+ // TestFleetManagedUpgradeUnprivilegedFIPS tests that the build under test can retrieve an action from
72+ // Fleet and perform the upgrade as an unprivileged FIPS-capable Elastic Agent. It does not need to test
73+ // all the combinations of versions as the standalone tests already perform those tests and
74+ // would be redundant.
75+ func TestFleetManagedUpgradeUnprivilegedFIPS (t * testing.T ) {
76+ info := define .Require (t , define.Requirements {
77+ Group : Fleet ,
78+ Stack : & define.Stack {},
79+ Local : false , // requires Agent installation
80+ Sudo : true , // requires Agent installation
81+ // FIPS: true // TODO: uncomment when https://github.com/elastic/elastic-agent/pull/8083 is merged
82+ })
83+ postWatcherSuccessHook := upgradetest .PostUpgradeAgentIsFIPSCapable
84+ upgradeOpts := []upgradetest.UpgradeOpt {upgradetest .WithPostWatcherSuccessHook (postWatcherSuccessHook )}
85+ testFleetManagedUpgrade (t , info , true , true , upgradeOpts ... )
86+ }
87+
88+ // TestFleetManagedUpgradePrivileged tests that the build under test can retrieve an action from
89+ // Fleet and perform the upgrade as a privileged FIPS-capable Elastic Agent. It does not need to test all
90+ // the combinations of versions as the standalone tests already perform those tests and
91+ // would be redundant.
92+ func TestFleetManagedUpgradePrivilegedFIPS (t * testing.T ) {
93+ info := define .Require (t , define.Requirements {
94+ Group : FleetPrivileged ,
95+ Stack : & define.Stack {},
96+ Local : false , // requires Agent installation
97+ Sudo : true , // requires Agent installation
98+ // FIPS: true // TODO: uncomment when https://github.com/elastic/elastic-agent/pull/8083 is merged
99+ })
100+
101+ // Check that new (post-upgrade) Agent is also FIPS-capable
102+ postWatcherSuccessHook := upgradetest .PostUpgradeAgentIsFIPSCapable
103+ upgradeOpts := []upgradetest.UpgradeOpt {upgradetest .WithPostWatcherSuccessHook (postWatcherSuccessHook )}
104+ testFleetManagedUpgrade (t , info , false , true , upgradeOpts ... )
105+ }
106+
107+ func testFleetManagedUpgrade (t * testing.T , info * define.Info , unprivileged bool , fips bool , upgradeOpts ... upgradetest.UpgradeOpts ) {
72108 ctx , cancel := context .WithCancel (context .TODO ())
73109 defer cancel ()
74110
75111 // Start at the build version as we want to test the retry
76112 // logic that is in the build.
77- startFixture , err := define .NewFixtureFromLocalBuild (t , define .Version ())
113+ fixtureOpts := make ([]atesting.FixtureOpt , 0 )
114+ if fips {
115+ fixtureOpts = append (fixtureOpts , atesting .WithFetcher ())
116+ }
117+
118+ var startFixture * testing.Fixture
119+ var err error
120+ if fips {
121+ startFixture , err = define .NewFixtureFromLocalFIPSBuild (t , define .Version (), fixtureOpts ... )
122+ } else {
123+ startFixture , err = define .NewFixtureFromLocalBuild (t , define .Version (), fixtureOpts ... )
124+ }
78125 require .NoError (t , err )
79126 err = startFixture .Prepare (ctx )
80127 require .NoError (t , err )
@@ -105,7 +152,7 @@ func testFleetManagedUpgrade(t *testing.T, info *define.Info, unprivileged bool)
105152 t .Logf ("Testing Elastic Agent upgrade from %s to %s with Fleet..." ,
106153 define .Version (), endVersionInfo .Binary .String ())
107154
108- testUpgradeFleetManagedElasticAgent (ctx , t , info , startFixture , endFixture , defaultPolicy (), unprivileged )
155+ testUpgradeFleetManagedElasticAgent (ctx , t , info , startFixture , endFixture , defaultPolicy (), unprivileged , upgradeOpts ... )
109156}
110157
111158func TestFleetAirGappedUpgradeUnprivileged (t * testing.T ) {
@@ -348,7 +395,15 @@ func testUpgradeFleetManagedElasticAgent(
348395 startFixture * atesting.Fixture ,
349396 endFixture * atesting.Fixture ,
350397 policy kibana.AgentPolicy ,
351- unprivileged bool ) {
398+ unprivileged bool ,
399+ opts ... upgradetest.UpgradeOpt ,
400+ ) {
401+
402+ // use the passed in options to perform the upgrade
403+ var upgradeOpts upgradetest.UpgradeOpts
404+ for _ , o := range opts {
405+ o (& upgradeOpts )
406+ }
352407
353408 kibClient := info .KibanaClient
354409
@@ -470,6 +525,12 @@ func testUpgradeFleetManagedElasticAgent(
470525 // version, otherwise it's possible that it was rolled back to the original version
471526 err = upgradetest .CheckHealthyAndVersion (ctx , startFixture , endVersionInfo .Binary )
472527 assert .NoError (t , err )
528+
529+ if upgradeOpts .postWatcherSuccessHook != nil {
530+ if err := upgradeOpts .postWatcherSuccessHook (ctx , endFixture ); err != nil {
531+ return fmt .Errorf ("post watcher success hook failed: %w" , err )
532+ }
533+ }
473534}
474535
475536func defaultPolicy () kibana.AgentPolicy {
0 commit comments