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  }