@@ -1311,38 +1311,94 @@ func (m *mockArtifactDownloader) withFleetServerURI(fleetServerURI string) {
13111311 m .fleetServerURI = fleetServerURI
13121312}
13131313
1314+ type mockUnpacker struct {
1315+ returnPackageMetadata packageMetadata
1316+ returnPackageMetadataError error
1317+ returnUnpackResult UnpackResult
1318+ returnUnpackError error
1319+ }
1320+
1321+ func (m * mockUnpacker ) getPackageMetadata (archivePath string ) (packageMetadata , error ) {
1322+ return m .returnPackageMetadata , m .returnPackageMetadataError
1323+ }
1324+
1325+ func (m * mockUnpacker ) unpack (version , archivePath , dataDir string , flavor string ) (UnpackResult , error ) {
1326+ return m .returnUnpackResult , m .returnUnpackError
1327+ }
1328+
13141329func TestUpgradeErrorHandling (t * testing.T ) {
13151330 log , _ := loggertest .New ("test" )
13161331 testError := errors .New ("test error" )
1332+ type upgraderMocker func (upgrader * Upgrader )
13171333
13181334 type testCase struct {
13191335 isDiskSpaceErrorResult bool
13201336 expectedError error
1337+ upgraderMocker upgraderMocker
13211338 }
13221339
13231340 testCases := map [string ]testCase {
13241341 "should return error if downloadArtifact fails" : {
13251342 isDiskSpaceErrorResult : false ,
13261343 expectedError : testError ,
1344+ upgraderMocker : func (upgrader * Upgrader ) {
1345+ upgrader .artifactDownloader = & mockArtifactDownloader {
1346+ returnError : testError ,
1347+ }
1348+ },
1349+ },
1350+ "should return error if getPackageMetadata fails" : {
1351+ isDiskSpaceErrorResult : false ,
1352+ expectedError : testError ,
1353+ upgraderMocker : func (upgrader * Upgrader ) {
1354+ upgrader .artifactDownloader = & mockArtifactDownloader {}
1355+ upgrader .unpacker = & mockUnpacker {
1356+ returnPackageMetadataError : testError ,
1357+ }
1358+ },
1359+ },
1360+ "should return error if unpack fails" : {
1361+ isDiskSpaceErrorResult : false ,
1362+ expectedError : testError ,
1363+ upgraderMocker : func (upgrader * Upgrader ) {
1364+ upgrader .artifactDownloader = & mockArtifactDownloader {}
1365+ upgrader .extractAgentVersion = func (metadata packageMetadata , upgradeVersion string ) agentVersion {
1366+ return agentVersion {
1367+ version : upgradeVersion ,
1368+ snapshot : false ,
1369+ hash : metadata .hash ,
1370+ }
1371+ }
1372+ upgrader .unpacker = & mockUnpacker {
1373+ returnPackageMetadata : packageMetadata {
1374+ manifest : & v1.PackageManifest {},
1375+ hash : "hash" ,
1376+ },
1377+ returnUnpackError : testError ,
1378+ }
1379+ },
13271380 },
13281381 "should add disk space error to the error chain if downloadArtifact fails with disk space error" : {
13291382 isDiskSpaceErrorResult : true ,
13301383 expectedError : upgradeErrors .ErrInsufficientDiskSpace ,
1384+ upgraderMocker : func (upgrader * Upgrader ) {
1385+ upgrader .artifactDownloader = & mockArtifactDownloader {
1386+ returnError : upgradeErrors .ErrInsufficientDiskSpace ,
1387+ }
1388+ },
13311389 },
13321390 }
13331391
13341392 mockAgentInfo := info .NewAgent (t )
13351393 mockAgentInfo .On ("Version" ).Return ("9.0.0" )
13361394
1337- upgrader , err := NewUpgrader (log , & artifact.Config {}, mockAgentInfo )
1338- require .NoError (t , err )
1339-
1340- upgrader .artifactDownloader = & mockArtifactDownloader {
1341- returnError : testError ,
1342- }
1343-
13441395 for name , tc := range testCases {
13451396 t .Run (name , func (t * testing.T ) {
1397+ upgrader , err := NewUpgrader (log , & artifact.Config {}, mockAgentInfo )
1398+ require .NoError (t , err )
1399+
1400+ tc .upgraderMocker (upgrader )
1401+
13461402 upgrader .isDiskSpaceErrorFunc = func (err error ) bool {
13471403 return tc .isDiskSpaceErrorResult
13481404 }
@@ -1362,7 +1418,6 @@ func (m *mockSender) Send(ctx context.Context, method, path string, params url.V
13621418func (m * mockSender ) URI () string {
13631419 return "mockURI"
13641420}
1365-
13661421func TestSetClient (t * testing.T ) {
13671422 log , _ := loggertest .New ("test" )
13681423 upgrader := & Upgrader {
0 commit comments