github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/cmd/abapAddonAssemblyKitRegisterPackages_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package cmd
     5  
     6  import (
     7  	"encoding/json"
     8  	"testing"
     9  
    10  	"github.com/SAP/jenkins-library/pkg/abap/aakaas"
    11  	abapbuild "github.com/SAP/jenkins-library/pkg/abap/build"
    12  	"github.com/SAP/jenkins-library/pkg/abaputils"
    13  	"github.com/pkg/errors"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func mockReader(path string) ([]byte, error) {
    18  	if path == "exists" {
    19  		return []byte("test"), nil
    20  	} else if path == "null" {
    21  		return []byte(""), nil
    22  	}
    23  	return nil, errors.New("error reading the file")
    24  }
    25  
    26  func TestRegisterPackagesStep(t *testing.T) {
    27  	var config abapAddonAssemblyKitRegisterPackagesOptions
    28  	config.Username = "dummy"
    29  	config.Password = "dummy"
    30  	var cpe abapAddonAssemblyKitRegisterPackagesCommonPipelineEnvironment
    31  	t.Run("step success", func(t *testing.T) {
    32  		client := &abaputils.ClientMock{
    33  			BodyList: []string{responseRegisterPackagesPost, "myToken", "dummyResponseUpload"},
    34  		}
    35  		addonDescriptor := abaputils.AddonDescriptor{
    36  			Repositories: []abaputils.Repository{
    37  				{
    38  					PackageName:    "SAPK-002AAINDRNMSPC",
    39  					Status:         "P",
    40  					SarXMLFilePath: "exists",
    41  				},
    42  				{
    43  					PackageName: "SAPK-001AAINDRNMSPC",
    44  					Status:      "R",
    45  				},
    46  			},
    47  		}
    48  		adoDesc, _ := json.Marshal(addonDescriptor)
    49  		config.AddonDescriptor = string(adoDesc)
    50  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
    51  
    52  		assert.NoError(t, err, "Did not expect error")
    53  		var addonDescriptorFinal abaputils.AddonDescriptor
    54  		err = json.Unmarshal([]byte(cpe.abap.addonDescriptor), &addonDescriptorFinal)
    55  		assert.NoError(t, err)
    56  		assert.Equal(t, "L", addonDescriptorFinal.Repositories[0].Status)
    57  	})
    58  	t.Run("step error - null file", func(t *testing.T) {
    59  		client := &abaputils.ClientMock{
    60  			BodyList: []string{responseRegisterPackagesPost, "myToken", "dummyResponseUpload"},
    61  		}
    62  		addonDescriptor := abaputils.AddonDescriptor{
    63  			Repositories: []abaputils.Repository{
    64  				{
    65  					PackageName:    "SAPK-002AAINDRNMSPC",
    66  					Status:         "P",
    67  					SarXMLFilePath: "null",
    68  				},
    69  			},
    70  		}
    71  		adoDesc, _ := json.Marshal(addonDescriptor)
    72  		config.AddonDescriptor = string(adoDesc)
    73  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
    74  
    75  		assert.Error(t, err, "Did expect error")
    76  	})
    77  	t.Run("step error - uploadSarFiles", func(t *testing.T) {
    78  		client := &abaputils.ClientMock{
    79  			Body:  "ErrorBody",
    80  			Error: errors.New("Failure during upload of SAR file"),
    81  		}
    82  		addonDescriptor := abaputils.AddonDescriptor{
    83  			Repositories: []abaputils.Repository{
    84  				{
    85  					PackageName:    "SAPK-002AAINDRNMSPC",
    86  					Status:         "P",
    87  					SarXMLFilePath: "exists",
    88  				},
    89  			},
    90  		}
    91  		adoDesc, _ := json.Marshal(addonDescriptor)
    92  		config.AddonDescriptor = string(adoDesc)
    93  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
    94  		assert.Error(t, err, "Did expect error")
    95  	})
    96  	t.Run("step error - registerPackages - invalid input", func(t *testing.T) {
    97  		client := &abaputils.ClientMock{
    98  			BodyList: []string{"myToken", "dummyResponseUpload"},
    99  		}
   100  		addonDescriptor := abaputils.AddonDescriptor{
   101  			Repositories: []abaputils.Repository{
   102  				{
   103  					Status:         "P",
   104  					SarXMLFilePath: "exists",
   105  				},
   106  			},
   107  		}
   108  		adoDesc, _ := json.Marshal(addonDescriptor)
   109  		config.AddonDescriptor = string(adoDesc)
   110  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
   111  		assert.Error(t, err, "Did expect error")
   112  	})
   113  }
   114  
   115  // ********************* Test uploadSarFiles *******************
   116  func TestUploadSarFiles(t *testing.T) {
   117  	t.Run("test uploadSarFiles - success", func(t *testing.T) {
   118  		client := abaputils.ClientMock{
   119  			Body: "dummy",
   120  		}
   121  		repositories, conn := setupRepos("exists", aakaas.PackageStatusPlanned, client)
   122  		err := uploadSarFiles(repositories, conn, mockReader)
   123  		assert.NoError(t, err)
   124  	})
   125  	t.Run("test uploadSarFiles - error due to missing file path", func(t *testing.T) {
   126  		repositories, conn := setupRepos("", aakaas.PackageStatusPlanned, abaputils.ClientMock{})
   127  		err := uploadSarFiles(repositories, conn, mockReader)
   128  		assert.Error(t, err)
   129  	})
   130  	t.Run("test uploadSarFiles - error due to missing file", func(t *testing.T) {
   131  		repositories, conn := setupRepos("does_not_exist", aakaas.PackageStatusPlanned, abaputils.ClientMock{})
   132  		err := uploadSarFiles(repositories, conn, mockReader)
   133  		assert.Error(t, err)
   134  	})
   135  	t.Run("test uploadSarFiles - error during upload", func(t *testing.T) {
   136  		client := abaputils.ClientMock{
   137  			Body:  "ErrorBody",
   138  			Error: errors.New("Failure during upload of SAR file"),
   139  		}
   140  		repositories, conn := setupRepos("exists", aakaas.PackageStatusPlanned, client)
   141  		err := uploadSarFiles(repositories, conn, mockReader)
   142  		assert.Error(t, err)
   143  	})
   144  }
   145  
   146  // ********************* Test registerPackages *******************
   147  func TestRegisterPackages(t *testing.T) {
   148  	t.Run("test registerPackages - planned", func(t *testing.T) {
   149  		client := abaputils.ClientMock{
   150  			Body: responseRegisterPackagesPost,
   151  		}
   152  		repositories, conn := setupRepos("Filepath", aakaas.PackageStatusPlanned, client)
   153  		repos, err := registerPackages(repositories, conn)
   154  		assert.NoError(t, err)
   155  		assert.Equal(t, string(aakaas.PackageStatusLocked), repos[0].Status)
   156  	})
   157  	t.Run("test registerPackages - released", func(t *testing.T) {
   158  		repositories, conn := setupRepos("Filepath", aakaas.PackageStatusReleased, abaputils.ClientMock{})
   159  		repos, err := registerPackages(repositories, conn)
   160  		assert.NoError(t, err)
   161  		assert.Equal(t, string(aakaas.PackageStatusReleased), repos[0].Status)
   162  	})
   163  	t.Run("test registerPackages - with error", func(t *testing.T) {
   164  		client := abaputils.ClientMock{
   165  			Body:  "ErrorBody",
   166  			Error: errors.New("Failure during registration"),
   167  		}
   168  		repositories, conn := setupRepos("Filepath", aakaas.PackageStatusPlanned, client)
   169  		repos, err := registerPackages(repositories, conn)
   170  		assert.Error(t, err)
   171  		assert.Equal(t, string(aakaas.PackageStatusPlanned), repos[0].Status)
   172  	})
   173  }
   174  
   175  // ********************* Test Setup *******************
   176  func setupRepos(filePath string, status aakaas.PackageStatus, cl abaputils.ClientMock) ([]abaputils.Repository, abapbuild.Connector) {
   177  	repositories := []abaputils.Repository{
   178  		{
   179  			Name:           "/DRNMSPC/COMP01",
   180  			VersionYAML:    "1.0.0",
   181  			PackageName:    "SAPK-001AAINDRNMSPC",
   182  			Status:         string(status),
   183  			SarXMLFilePath: filePath,
   184  		},
   185  	}
   186  	conn := new(abapbuild.Connector)
   187  	conn.Client = &cl
   188  	conn.Header = make(map[string][]string)
   189  	return repositories, *conn
   190  }
   191  
   192  // ********************* Testdata *******************
   193  
   194  var responseRegisterPackagesPost = `{
   195      "d": {
   196          "__metadata": {
   197              "id": "https://W7Q.DMZWDF.SAP.CORP:443/odata/aas_ocs_package/OcsPackageSet('SAPK-001AAINDRNMSPC')",
   198              "uri": "https://W7Q.DMZWDF.SAP.CORP:443/odata/aas_ocs_package/OcsPackageSet('SAPK-001AAINDRNMSPC')",
   199              "type": "SSDA.AAS_ODATA_PACKAGE_SRV.OcsPackage"
   200          },
   201          "Name": "SAPK-001AAINDRNMSPC",
   202          "Type": "AOI",
   203          "Component": "/DRNMSPC/COMP01",
   204          "Release": "0001",
   205          "Level": "0000",
   206          "Status": "L",
   207          "Operation": "",
   208          "Namespace": "/DRNMSPC/",
   209          "Vendorid": "0000203069"
   210      }
   211  }`