github.com/SAP/jenkins-library@v1.362.0/cmd/tmsExport_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package cmd 5 6 import ( 7 "os" 8 "strconv" 9 "testing" 10 11 "github.com/SAP/jenkins-library/pkg/mock" 12 "github.com/SAP/jenkins-library/pkg/tms" 13 "github.com/pkg/errors" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 type tmsExportMockUtils struct { 18 *mock.ExecMockRunner 19 *mock.FilesMock 20 } 21 22 func newTmsExportTestsUtils() tmsExportMockUtils { 23 utils := tmsExportMockUtils{ 24 ExecMockRunner: &mock.ExecMockRunner{}, 25 FilesMock: &mock.FilesMock{}, 26 } 27 return utils 28 } 29 30 func (cim *communicationInstanceMock) ExportFileToNode(fileInfo tms.FileInfo, nodeName, description, namedUser string) (tms.NodeUploadResponseEntity, error) { 31 fileId := strconv.FormatInt(fileInfo.Id, 10) 32 var nodeUploadResponseEntity tms.NodeUploadResponseEntity 33 if description != CUSTOM_DESCRIPTION || nodeName != NODE_NAME || fileId != strconv.FormatInt(FILE_ID, 10) || namedUser != NAMED_USER { 34 return nodeUploadResponseEntity, errors.New(INVALID_INPUT_MSG) 35 } 36 37 if cim.isErrorOnExportFileToNode { 38 return nodeUploadResponseEntity, errors.New("Something went wrong on exporting file to node") 39 } else { 40 return cim.exportFileToNodeResponse, nil 41 } 42 } 43 44 func TestRunTmsExport(t *testing.T) { 45 t.Parallel() 46 47 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. export file to node", func(t *testing.T) { 48 t.Parallel() 49 50 // init 51 nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}} 52 fileInfo := tms.FileInfo{Id: FILE_ID, Name: MTA_NAME} 53 communicationInstance := communicationInstanceMock{getNodesResponse: nodes, uploadFileResponse: fileInfo} 54 55 utils := newTmsTestsUtils() 56 utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content")) 57 58 mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH) 59 utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes) 60 61 mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH) 62 utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes) 63 64 nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL} 65 config := tmsExportOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping} 66 67 // test 68 err := runTmsExport(config, &communicationInstance, utils) 69 70 // assert 71 assert.NoError(t, err) 72 }) 73 74 t.Run("error path: error while uploading file", func(t *testing.T) { 75 t.Parallel() 76 77 // init 78 nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}} 79 communicationInstance := communicationInstanceMock{getNodesResponse: nodes, isErrorOnUploadFile: true} 80 81 utils := newTmsTestsUtils() 82 utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content")) 83 84 mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH) 85 utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes) 86 87 mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH) 88 utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes) 89 90 nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL} 91 config := tmsExportOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping} 92 93 // test 94 err := runTmsExport(config, &communicationInstance, utils) 95 96 // assert 97 assert.EqualError(t, err, "failed to upload file: Something went wrong on uploading file") 98 }) 99 100 t.Run("error path: error while uploading MTA extension descriptor to node", func(t *testing.T) { 101 t.Parallel() 102 103 // init 104 nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}} 105 communicationInstance := communicationInstanceMock{getNodesResponse: nodes, isErrorOnUploadMtaExtDescriptorToNode: true} 106 107 utils := newTmsTestsUtils() 108 utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content")) 109 110 mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH) 111 utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes) 112 113 mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH) 114 utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes) 115 116 nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL} 117 config := tmsExportOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping} 118 119 // test 120 err := runTmsExport(config, &communicationInstance, utils) 121 122 // assert 123 assert.EqualError(t, err, "failed to upload MTA extension descriptor to node: Something went wrong on uploading MTA extension descriptor to node") 124 }) 125 126 t.Run("error path: error while exporting file to node", func(t *testing.T) { 127 t.Parallel() 128 129 // init 130 nodes := []tms.Node{{Id: NODE_ID, Name: NODE_NAME}} 131 fileInfo := tms.FileInfo{Id: FILE_ID, Name: MTA_NAME} 132 communicationInstance := communicationInstanceMock{getNodesResponse: nodes, uploadFileResponse: fileInfo, isErrorOnExportFileToNode: true} 133 134 utils := newTmsTestsUtils() 135 utils.AddFile(MTA_PATH_LOCAL, []byte("dummy content")) 136 137 mtaYamlBytes, _ := os.ReadFile(MTA_YAML_PATH) 138 utils.AddFile(MTA_YAML_PATH_LOCAL, mtaYamlBytes) 139 140 mtaExtDescriptorBytes, _ := os.ReadFile(MTA_EXT_DESCRIPTOR_PATH) 141 utils.AddFile(MTA_EXT_DESCRIPTOR_PATH_LOCAL, mtaExtDescriptorBytes) 142 143 nodeNameExtDescriptorMapping := map[string]interface{}{NODE_NAME: MTA_EXT_DESCRIPTOR_PATH_LOCAL} 144 config := tmsExportOptions{MtaPath: MTA_PATH_LOCAL, CustomDescription: CUSTOM_DESCRIPTION, NamedUser: NAMED_USER, NodeName: NODE_NAME, MtaVersion: MTA_VERSION, NodeExtDescriptorMapping: nodeNameExtDescriptorMapping} 145 146 // test 147 err := runTmsExport(config, &communicationInstance, utils) 148 149 // assert 150 assert.EqualError(t, err, "failed to export file to node: Something went wrong on exporting file to node") 151 }) 152 } 153 154 func Test_convertExportOptions(t *testing.T) { 155 t.Parallel() 156 mockServiceKey := `no real serviceKey json necessary for these tests` 157 158 t.Run("Use of new serviceKey parameter works", func(t *testing.T) { 159 t.Parallel() 160 161 // init 162 config := tmsExportOptions{ServiceKey: mockServiceKey} 163 wantOptions := tms.Options{ServiceKey: mockServiceKey, CustomDescription: "Created by Piper"} 164 165 // test 166 gotOptions := convertExportOptions(config) 167 168 // assert 169 assert.Equal(t, wantOptions, gotOptions) 170 }) 171 172 t.Run("Use of old tmsServiceKey parameter works as well", func(t *testing.T) { 173 t.Parallel() 174 175 // init 176 config := tmsExportOptions{TmsServiceKey: mockServiceKey} 177 wantOptions := tms.Options{ServiceKey: mockServiceKey, CustomDescription: "Created by Piper"} 178 179 // test 180 gotOptions := convertExportOptions(config) 181 182 // assert 183 assert.Equal(t, wantOptions, gotOptions) 184 }) 185 186 t.Run("Use of both tmsServiceKey and serviceKey parameter favors the new serviceKey parameter", func(t *testing.T) { 187 t.Parallel() 188 189 // init 190 config := tmsExportOptions{ServiceKey: mockServiceKey, TmsServiceKey: "some other string"} 191 wantOptions := tms.Options{ServiceKey: mockServiceKey, CustomDescription: "Created by Piper"} 192 193 // test 194 gotOptions := convertExportOptions(config) 195 196 // assert 197 assert.Equal(t, wantOptions, gotOptions) 198 }) 199 }