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

     1  //go:build unit
     2  // +build unit
     3  
     4  package cmd
     5  
     6  import (
     7  	"encoding/json"
     8  	"fmt"
     9  	"os"
    10  	"strconv"
    11  	"testing"
    12  
    13  	"github.com/SAP/jenkins-library/pkg/mock"
    14  	"github.com/SAP/jenkins-library/pkg/tms"
    15  	"github.com/pkg/errors"
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  const NODE_ID = 777
    20  const ID_OF_MTA_EXT_DESCRIPTOR = 456
    21  const FILE_ID = 333
    22  const NODE_NAME = "TEST_NODE"
    23  const MTA_PATH_LOCAL = "example.mtar"
    24  const MTA_NAME = "example.mtar"
    25  const MTA_ID = "com.sap.tms.upload.test"
    26  const MTA_EXT_ID = "com.sap.tms.upload.test_ext"
    27  const MTA_YAML_PATH_LOCAL = "mta.yaml"
    28  const MTA_YAML_PATH = "./testdata/TestRunTmsUpload/valid/mta.yaml"
    29  const INVALID_MTA_YAML_PATH = "./testdata/TestRunTmsUpload/invalid/mta_not_a_yaml.yaml"
    30  const INVALID_MTA_YAML_PATH_2 = "./testdata/TestRunTmsUpload/invalid/mta_no_id_and_version_parameters.yaml"
    31  const MTA_EXT_DESCRIPTOR_PATH_LOCAL = "test.mtaext"
    32  const INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL = "wrong_content.mtaext"
    33  const INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL_2 = "wrong_extends_parameter.mtaext"
    34  const INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL_3 = "missing_extends_parameter.mtaext"
    35  const MTA_EXT_DESCRIPTOR_PATH = "./testdata/TestRunTmsUpload/valid/test.mtaext"
    36  const INVALID_MTA_EXT_DESCRIPTOR_PATH = "./testdata/TestRunTmsUpload/invalid/wrong_content.mtaext"
    37  const INVALID_MTA_EXT_DESCRIPTOR_PATH_2 = "./testdata/TestRunTmsUpload/invalid/wrong_extends_parameter.mtaext"
    38  const INVALID_MTA_EXT_DESCRIPTOR_PATH_3 = "./testdata/TestRunTmsUpload/invalid/missing_extends_parameter.mtaext"
    39  const CUSTOM_DESCRIPTION = "This is a test description"
    40  const NAMED_USER = "techUser"
    41  const MTA_VERSION = "1.0.0"
    42  const WRONG_MTA_VERSION = "3.2.1"
    43  const LAST_CHANGED_AT = "2021-11-16T13:06:05.711Z"
    44  const INVALID_INPUT_MSG = "Invalid input parameter(s) when getting MTA extension descriptor"
    45  
    46  type tmsMockUtils struct {
    47  	*mock.ExecMockRunner
    48  	*mock.FilesMock
    49  }
    50  
    51  func newTmsTestsUtils() tmsMockUtils {
    52  	utils := tmsMockUtils{
    53  		ExecMockRunner: &mock.ExecMockRunner{},
    54  		FilesMock:      &mock.FilesMock{},
    55  	}
    56  	return utils
    57  }
    58  
    59  type communicationInstanceMock struct {
    60  	getNodesResponse                      []tms.Node
    61  	getMtaExtDescriptorResponse           tms.MtaExtDescriptor
    62  	updateMtaExtDescriptorResponse        tms.MtaExtDescriptor
    63  	uploadMtaExtDescriptorToNodeResponse  tms.MtaExtDescriptor
    64  	uploadFileResponse                    tms.FileInfo
    65  	uploadFileToNodeResponse              tms.NodeUploadResponseEntity
    66  	exportFileToNodeResponse              tms.NodeUploadResponseEntity
    67  	isErrorOnGetNodes                     bool
    68  	isErrorOnGetMtaExtDescriptor          bool
    69  	isErrorOnUpdateMtaExtDescriptor       bool
    70  	isErrorOnUploadMtaExtDescriptorToNode bool
    71  	isErrorOnUploadFile                   bool
    72  	isErrorOnUploadFileToNode             bool
    73  	isErrorOnExportFileToNode             bool
    74  }
    75  
    76  func (cim *communicationInstanceMock) GetNodes() ([]tms.Node, error) {
    77  	if cim.isErrorOnGetNodes {
    78  		var nodes []tms.Node
    79  		return nodes, errors.New("Something went wrong on getting nodes")
    80  	} else {
    81  		return cim.getNodesResponse, nil
    82  	}
    83  }
    84  
    85  func (cim *communicationInstanceMock) GetMtaExtDescriptor(nodeId int64, mtaId, mtaVersion string) (tms.MtaExtDescriptor, error) {
    86  	var mtaExtDescriptor tms.MtaExtDescriptor
    87  	if mtaVersion != MTA_VERSION || nodeId != NODE_ID || mtaId != MTA_ID {
    88  		return mtaExtDescriptor, errors.New(INVALID_INPUT_MSG)
    89  	}
    90  
    91  	if cim.isErrorOnGetMtaExtDescriptor {
    92  		return mtaExtDescriptor, errors.New("Something went wrong on getting MTA extension descriptor")
    93  	} else {
    94  		return cim.getMtaExtDescriptorResponse, nil
    95  	}
    96  }
    97  
    98  func (cim *communicationInstanceMock) UpdateMtaExtDescriptor(nodeId, idOfMtaExtDescriptor int64, file, mtaVersion, description, namedUser string) (tms.MtaExtDescriptor, error) {
    99  	var mtaExtDescriptor tms.MtaExtDescriptor
   100  	if mtaVersion != MTA_VERSION || description != CUSTOM_DESCRIPTION || nodeId != NODE_ID || idOfMtaExtDescriptor != ID_OF_MTA_EXT_DESCRIPTOR || file != MTA_EXT_DESCRIPTOR_PATH_LOCAL || namedUser != NAMED_USER {
   101  		return mtaExtDescriptor, errors.New(INVALID_INPUT_MSG)
   102  	}
   103  
   104  	if cim.isErrorOnUpdateMtaExtDescriptor {
   105  		return mtaExtDescriptor, errors.New("Something went wrong on updating MTA extension descriptor")
   106  	} else {
   107  		return cim.updateMtaExtDescriptorResponse, nil
   108  	}
   109  }
   110  
   111  func (cim *communicationInstanceMock) UploadMtaExtDescriptorToNode(nodeId int64, file, mtaVersion, description, namedUser string) (tms.MtaExtDescriptor, error) {
   112  	var mtaExtDescriptor tms.MtaExtDescriptor
   113  	if mtaVersion != MTA_VERSION || description != CUSTOM_DESCRIPTION || nodeId != NODE_ID || file != MTA_EXT_DESCRIPTOR_PATH_LOCAL || namedUser != NAMED_USER {
   114  		return mtaExtDescriptor, errors.New(INVALID_INPUT_MSG)
   115  	}
   116  
   117  	if cim.isErrorOnUploadMtaExtDescriptorToNode {
   118  		return mtaExtDescriptor, errors.New("Something went wrong on uploading MTA extension descriptor to node")
   119  	} else {
   120  		return cim.uploadMtaExtDescriptorToNodeResponse, nil
   121  	}
   122  }
   123  
   124  func (cim *communicationInstanceMock) UploadFile(file, namedUser string) (tms.FileInfo, error) {
   125  	var fileInfo tms.FileInfo
   126  	if file != MTA_PATH_LOCAL || namedUser != NAMED_USER {
   127  		return fileInfo, errors.New(INVALID_INPUT_MSG)
   128  	}
   129  
   130  	if cim.isErrorOnUploadFile {
   131  		return fileInfo, errors.New("Something went wrong on uploading file")
   132  	} else {
   133  		return cim.uploadFileResponse, nil
   134  	}
   135  }
   136  
   137  func (cim *communicationInstanceMock) UploadFileToNode(fileInfo tms.FileInfo, nodeName, description, namedUser string) (tms.NodeUploadResponseEntity, error) {
   138  	fileId := strconv.FormatInt(fileInfo.Id, 10)
   139  	var nodeUploadResponseEntity tms.NodeUploadResponseEntity
   140  	if description != CUSTOM_DESCRIPTION || nodeName != NODE_NAME || fileId != strconv.FormatInt(FILE_ID, 10) || namedUser != NAMED_USER {
   141  		return nodeUploadResponseEntity, errors.New(INVALID_INPUT_MSG)
   142  	}
   143  
   144  	if cim.isErrorOnUploadFileToNode {
   145  		return nodeUploadResponseEntity, errors.New("Something went wrong on uploading file to node")
   146  	} else {
   147  		return cim.uploadFileToNodeResponse, nil
   148  	}
   149  }
   150  
   151  func mapToJson(m map[string]interface{}) (string, error) {
   152  	b, err := json.Marshal(m)
   153  	if err != nil {
   154  		return "", err
   155  	}
   156  	return string(b), nil
   157  }
   158  
   159  func TestRunTmsUpload(t *testing.T) {
   160  	t.Parallel()
   161  
   162  	t.Run("happy path: 1. get nodes 2. get MTA ext descriptor -> nothing obtained 3. upload MTA ext descriptor to node 4. upload file 5. upload file to node", func(t *testing.T) {
   163  		t.Parallel()
   164  
   165  		// init
   166  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   167  		fileInfo := tms.FileInfo{Id: FILE_ID, Name: MTA_NAME}
   168  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, uploadFileResponse: fileInfo}
   169  
   170  		utils := newTmsTestsUtils()
   171  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   172  
   173  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   174  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   175  
   176  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   177  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   178  
   179  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   180  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   181  
   182  		// test
   183  		err := runTmsUpload(config, &communicationInstance, utils)
   184  
   185  		// assert
   186  		assert.NoError(t, err)
   187  	})
   188  
   189  	t.Run("happy path: no mapping between node names and MTA extension descriptors is provided -> only upload file and upload file to node calls will be executed", func(t *testing.T) {
   190  		t.Parallel()
   191  
   192  		// init
   193  		fileInfo := tms.FileInfo{Id: FILE_ID, Name: MTA_NAME}
   194  		communicationInstance := communicationInstanceMock{uploadFileResponse: fileInfo}
   195  
   196  		utils := newTmsTestsUtils()
   197  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   198  
   199  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION}
   200  
   201  		// test
   202  		err := runTmsUpload(config, &communicationInstance, utils)
   203  
   204  		// assert
   205  		assert.NoError(t, err)
   206  	})
   207  
   208  	t.Run("happy path: 1. get nodes 2. get MTA ext descriptor 3. update the MTA ext descriptor 4. upload file 5. upload file to node", func(t *testing.T) {
   209  		t.Parallel()
   210  
   211  		// init
   212  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   213  		mtaExtDescriptor := tms.MtaExtDescriptor{Id: ID_OF_MTA_EXT_DESCRIPTOR, Description: "Some existing description", MtaId: MTA_ID, MtaExtId: MTA_EXT_ID, MtaVersion: MTA_VERSION, LastChangedAt: LAST_CHANGED_AT}
   214  		fileInfo := tms.FileInfo{Id: FILE_ID, Name: MTA_NAME}
   215  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, getMtaExtDescriptorResponse: mtaExtDescriptor, uploadFileResponse: fileInfo}
   216  
   217  		utils := newTmsTestsUtils()
   218  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   219  
   220  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   221  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   222  
   223  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   224  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   225  
   226  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   227  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   228  
   229  		// test
   230  		err := runTmsUpload(config, &communicationInstance, utils)
   231  
   232  		// assert
   233  		assert.NoError(t, err)
   234  	})
   235  
   236  	t.Run("error path: MTA file does not exist", func(t *testing.T) {
   237  		t.Parallel()
   238  
   239  		// init
   240  		communicationInstance := communicationInstanceMock{}
   241  		utils := newTmsTestsUtils()
   242  
   243  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   244  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   245  
   246  		// test
   247  		err := runTmsUpload(config, &communicationInstance, utils)
   248  
   249  		// assert
   250  		assert.EqualError(t, err, fmt.Sprintf("mta file %s not found", MTA_PATH_LOCAL))
   251  	})
   252  
   253  	t.Run("error path: error while getting nodes", func(t *testing.T) {
   254  		t.Parallel()
   255  
   256  		// init
   257  		communicationInstance := communicationInstanceMock{isErrorOnGetNodes: true}
   258  		utils := newTmsTestsUtils()
   259  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   260  
   261  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   262  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   263  
   264  		// test
   265  		err := runTmsUpload(config, &communicationInstance, utils)
   266  
   267  		// assert
   268  		assert.EqualError(t, err, "failed to get nodes: Something went wrong on getting nodes")
   269  	})
   270  
   271  	t.Run("error path: cannot read mta.yaml (the file is missing)", func(t *testing.T) {
   272  		t.Parallel()
   273  
   274  		// init
   275  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   276  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes}
   277  		utils := newTmsTestsUtils()
   278  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   279  
   280  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   281  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   282  
   283  		// test
   284  		err := runTmsUpload(config, &communicationInstance, utils)
   285  
   286  		// assert
   287  		assert.EqualError(t, err, "failed to get mta.yaml as map: could not read 'mta.yaml'")
   288  	})
   289  
   290  	t.Run("error path: cannot unmarshal mta.yaml (the file does not represent a yaml)", func(t *testing.T) {
   291  		t.Parallel()
   292  
   293  		// init
   294  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   295  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes}
   296  		utils := newTmsTestsUtils()
   297  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   298  
   299  		mtaYamlBytes, _ := os.ReadFile(INVALID_MTA_YAML_PATH)
   300  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   301  
   302  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   303  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   304  
   305  		// test
   306  		err := runTmsUpload(config, &communicationInstance, utils)
   307  
   308  		// assert
   309  		assert.EqualError(t, err, "failed to get mta.yaml as map: error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type map[string]interface {}")
   310  	})
   311  
   312  	t.Run("error path: no 'ID' and 'version' parameters found in mta.yaml", func(t *testing.T) {
   313  		t.Parallel()
   314  
   315  		// init
   316  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   317  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes}
   318  		utils := newTmsTestsUtils()
   319  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   320  
   321  		mtaYamlBytes, _ := os.ReadFile(INVALID_MTA_YAML_PATH_2)
   322  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   323  
   324  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   325  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   326  
   327  		// test
   328  		err := runTmsUpload(config, &communicationInstance, utils)
   329  
   330  		// assert
   331  		var expectedErrorMessage string
   332  		expectedErrorMessage += "parameter 'ID' is not found in mta.yaml\n"
   333  		expectedErrorMessage += "parameter 'version' is not found in mta.yaml\n"
   334  
   335  		assert.EqualError(t, err, expectedErrorMessage)
   336  	})
   337  
   338  	t.Run("error path: errors on validating the mapping between node names and MTA extension descriptor paths", func(t *testing.T) {
   339  		t.Parallel()
   340  
   341  		// init
   342  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   343  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes}
   344  		utils := newTmsTestsUtils()
   345  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   346  
   347  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   348  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   349  
   350  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   351  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   352  
   353  		invalidMtaExtDescriptorBytes, _ := os.ReadFile(INVALID_MTA_EXT_DESCRIPTOR_PATH)
   354  		utils.AddFile(INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL, invalidMtaExtDescriptorBytes)
   355  
   356  		invalidMtaExtDescriptorBytes2, _ := os.ReadFile(INVALID_MTA_EXT_DESCRIPTOR_PATH_2)
   357  		utils.AddFile(INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL_2, invalidMtaExtDescriptorBytes2)
   358  
   359  		invalidMtaExtDescriptorBytes3, _ := os.ReadFile(INVALID_MTA_EXT_DESCRIPTOR_PATH_3)
   360  		utils.AddFile(INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL_3, invalidMtaExtDescriptorBytes3)
   361  
   362  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL, "UNEXISTING_NODE": "unexisting.mtaext", "ONE_MORE_UNEXISTING_NODE": INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL, "ONE_MORE_UNEXISTING_NODE_2": INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL_2, "ONE_MORE_UNEXISTING_NODE_3": INVALID_MTA_EXT_DESCRIPTOR_PATH_LOCAL_3}
   363  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: WRONG_MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   364  
   365  		// test
   366  		err := runTmsUpload(config, &communicationInstance, utils)
   367  
   368  		// assert
   369  		var expectedErrorMessage string
   370  		expectedErrorMessage += "tried to parse wrong_content.mtaext as yaml, but got an error: error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type map[string]interface {}\n"
   371  		expectedErrorMessage += "parameter 'mtaVersion' does not match the MTA version in mta.yaml\n"
   372  		expectedErrorMessage += "parameter 'extends' in MTA extension descriptor files [missing_extends_parameter.mtaext wrong_extends_parameter.mtaext] is not the same as MTA ID or is missing at all\n"
   373  		expectedErrorMessage += "MTA extension descriptor files [unexisting.mtaext] do not exist\n"
   374  		expectedErrorMessage += "nodes [ONE_MORE_UNEXISTING_NODE ONE_MORE_UNEXISTING_NODE_2 ONE_MORE_UNEXISTING_NODE_3 UNEXISTING_NODE] do not exist. Please check node names provided in 'nodeExtDescriptorMapping' parameter or create these nodes\n"
   375  		assert.EqualError(t, err, expectedErrorMessage)
   376  	})
   377  
   378  	t.Run("error path: error while getting MTA extension descriptor", func(t *testing.T) {
   379  		t.Parallel()
   380  
   381  		// init
   382  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   383  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, isErrorOnGetMtaExtDescriptor: true}
   384  		utils := newTmsTestsUtils()
   385  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   386  
   387  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   388  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   389  
   390  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   391  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   392  
   393  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   394  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   395  
   396  		// test
   397  		err := runTmsUpload(config, &communicationInstance, utils)
   398  
   399  		// assert
   400  		assert.EqualError(t, err, "failed to get MTA extension descriptor: Something went wrong on getting MTA extension descriptor")
   401  	})
   402  
   403  	t.Run("error path: error while updating MTA extension descriptor", func(t *testing.T) {
   404  		t.Parallel()
   405  
   406  		// init
   407  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   408  		mtaExtDescriptor := tms.MtaExtDescriptor{Id: ID_OF_MTA_EXT_DESCRIPTOR, Description: "Some existing description", MtaId: MTA_ID, MtaExtId: MTA_EXT_ID, MtaVersion: MTA_VERSION, LastChangedAt: LAST_CHANGED_AT}
   409  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, getMtaExtDescriptorResponse: mtaExtDescriptor, isErrorOnUpdateMtaExtDescriptor: true}
   410  
   411  		utils := newTmsTestsUtils()
   412  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   413  
   414  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   415  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   416  
   417  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   418  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   419  
   420  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   421  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   422  
   423  		// test
   424  		err := runTmsUpload(config, &communicationInstance, utils)
   425  
   426  		// assert
   427  		assert.EqualError(t, err, "failed to update MTA extension descriptor: Something went wrong on updating MTA extension descriptor")
   428  	})
   429  
   430  	t.Run("error path: error while uploading MTA extension descriptor to node", func(t *testing.T) {
   431  		t.Parallel()
   432  
   433  		// init
   434  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   435  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, isErrorOnUploadMtaExtDescriptorToNode: true}
   436  
   437  		utils := newTmsTestsUtils()
   438  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   439  
   440  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   441  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   442  
   443  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   444  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   445  
   446  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   447  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   448  
   449  		// test
   450  		err := runTmsUpload(config, &communicationInstance, utils)
   451  
   452  		// assert
   453  		assert.EqualError(t, err, "failed to upload MTA extension descriptor to node: Something went wrong on uploading MTA extension descriptor to node")
   454  	})
   455  
   456  	t.Run("error path: error while uploading file", func(t *testing.T) {
   457  		t.Parallel()
   458  
   459  		// init
   460  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   461  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, isErrorOnUploadFile: true}
   462  
   463  		utils := newTmsTestsUtils()
   464  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   465  
   466  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   467  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   468  
   469  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   470  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   471  
   472  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   473  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   474  
   475  		// test
   476  		err := runTmsUpload(config, &communicationInstance, utils)
   477  
   478  		// assert
   479  		assert.EqualError(t, err, "failed to upload file: Something went wrong on uploading file")
   480  	})
   481  
   482  	t.Run("error path: error while uploading file to node", func(t *testing.T) {
   483  		t.Parallel()
   484  
   485  		// init
   486  		nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}}
   487  		fileInfo := tms.FileInfo{Id: FILE_ID, Name: MTA_NAME}
   488  		communicationInstance := communicationInstanceMock{getNodesResponse: nodes, uploadFileResponse: fileInfo, isErrorOnUploadFileToNode: true}
   489  
   490  		utils := newTmsTestsUtils()
   491  		utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content"))
   492  
   493  		mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH)
   494  		utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes)
   495  
   496  		mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH)
   497  		utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes)
   498  
   499  		nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL}
   500  		config := tmsUploadOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping}
   501  
   502  		// test
   503  		err := runTmsUpload(config, &communicationInstance, utils)
   504  
   505  		// assert
   506  		assert.EqualError(t, err, "failed to upload file to node: Something went wrong on uploading file to node")
   507  	})
   508  }