github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/piperenv/CPEMap_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package piperenv
     5  
     6  import (
     7  	"encoding/json"
     8  	"fmt"
     9  	"os"
    10  	"path"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func Test_writeMapToDisk(t *testing.T) {
    17  	t.Parallel()
    18  	testMap := CPEMap{
    19  		"A/B": "Hallo",
    20  		"sub": map[string]interface{}{
    21  			"A/B": "Test",
    22  		},
    23  		"number": 5,
    24  	}
    25  
    26  	tmpDir := t.TempDir()
    27  	err := testMap.WriteToDisk(tmpDir)
    28  	require.NoError(t, err)
    29  
    30  	testData := []struct {
    31  		Path          string
    32  		ExpectedValue string
    33  	}{
    34  		{
    35  			Path:          "A/B",
    36  			ExpectedValue: "Hallo",
    37  		},
    38  		{
    39  			Path:          "sub.json",
    40  			ExpectedValue: "{\"A/B\":\"Test\"}",
    41  		},
    42  		{
    43  			Path:          "number.json",
    44  			ExpectedValue: "5",
    45  		},
    46  	}
    47  
    48  	for _, testCase := range testData {
    49  		t.Run(fmt.Sprintf("check path %s", testCase.Path), func(t *testing.T) {
    50  			tPath := path.Join(tmpDir, testCase.Path)
    51  			bytes, err := os.ReadFile(tPath)
    52  			require.NoError(t, err)
    53  			require.Equal(t, testCase.ExpectedValue, string(bytes))
    54  		})
    55  	}
    56  }
    57  
    58  func TestCPEMap_LoadFromDisk(t *testing.T) {
    59  	t.Parallel()
    60  	tmpDir := t.TempDir()
    61  
    62  	err := os.WriteFile(path.Join(tmpDir, "Foo"), []byte("Bar"), 0644)
    63  	require.NoError(t, err)
    64  	err = os.WriteFile(path.Join(tmpDir, "Hello"), []byte("World"), 0644)
    65  	require.NoError(t, err)
    66  	subPath := path.Join(tmpDir, "Batman")
    67  	err = os.Mkdir(subPath, 0744)
    68  	require.NoError(t, err)
    69  	err = os.WriteFile(path.Join(subPath, "Bruce"), []byte("Wayne"), 0644)
    70  	require.NoError(t, err)
    71  	err = os.WriteFile(path.Join(subPath, "Robin"), []byte("toBeEmptied"), 0644)
    72  	require.NoError(t, err)
    73  	err = os.WriteFile(path.Join(subPath, "Test.json"), []byte("54"), 0644)
    74  	require.NoError(t, err)
    75  
    76  	cpe := CPEMap{}
    77  	err = cpe.LoadFromDisk(tmpDir)
    78  	require.NoError(t, err)
    79  
    80  	require.Equal(t, "Bar", cpe["Foo"])
    81  	require.Equal(t, "World", cpe["Hello"])
    82  	require.Equal(t, "", cpe["Batman/Robin"])
    83  	require.Equal(t, "Wayne", cpe["Batman/Bruce"])
    84  	require.Equal(t, json.Number("54"), cpe["Batman/Test"])
    85  }
    86  
    87  func TestNumbersArePassedCorrectly(t *testing.T) {
    88  	t.Parallel()
    89  	tmpDir := t.TempDir()
    90  
    91  	const jsonNumber = "5.5000"
    92  	err := os.WriteFile(path.Join(tmpDir, "test.json"), []byte(jsonNumber), 0644)
    93  	require.NoError(t, err)
    94  
    95  	cpeMap := CPEMap{}
    96  	err = cpeMap.LoadFromDisk(tmpDir)
    97  	require.NoError(t, err)
    98  
    99  	rawJSON, err := json.Marshal(cpeMap["test"])
   100  	require.NoError(t, err)
   101  	require.Equal(t, jsonNumber, string(rawJSON))
   102  }
   103  
   104  func TestCommonPipelineEnvDirNotPresent(t *testing.T) {
   105  	cpe := CPEMap{}
   106  	err := cpe.LoadFromDisk("/path/does/not/exist")
   107  	require.NoError(t, err)
   108  	require.Len(t, cpe, 0)
   109  }