mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-03-03 15:02:35 +02:00
fix(commonPipelineEnvironment): keep json numbers untouched (#2908)
* keep numbers untouched * rebase master
This commit is contained in:
parent
e94cbb0840
commit
a48b8afc31
@ -1,6 +1,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
"github.com/SAP/jenkins-library/pkg/piperenv"
|
||||
@ -45,7 +46,9 @@ func runWritePipelineEnv() error {
|
||||
}
|
||||
|
||||
commonPipelineEnv := piperenv.CPEMap{}
|
||||
err := json.Unmarshal(inBytes, &commonPipelineEnv)
|
||||
decoder := json.NewDecoder(bytes.NewReader(inBytes))
|
||||
decoder.UseNumber()
|
||||
err := decoder.Decode(&commonPipelineEnv)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -56,11 +59,11 @@ func runWritePipelineEnv() error {
|
||||
return err
|
||||
}
|
||||
|
||||
bytes, err := json.MarshalIndent(commonPipelineEnv, "", "\t")
|
||||
writtenBytes, err := json.MarshalIndent(commonPipelineEnv, "", "\t")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = os.Stdout.Write(bytes)
|
||||
_, err = os.Stdout.Write(writtenBytes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package piperenv
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
@ -100,7 +101,9 @@ func readFileContent(fullPath string) (string, interface{}, error) {
|
||||
if strings.HasSuffix(fullPath, ".json") {
|
||||
// value is json encoded
|
||||
var value interface{}
|
||||
err = json.Unmarshal(fileContent, &value)
|
||||
decoder := json.NewDecoder(bytes.NewReader(fileContent))
|
||||
decoder.UseNumber()
|
||||
err = decoder.Decode(&value)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
package piperenv
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
@ -20,12 +21,12 @@ func Test_writeMapToDisk(t *testing.T) {
|
||||
}
|
||||
|
||||
tmpDir, err := ioutil.TempDir(os.TempDir(), "test-data-*")
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() {
|
||||
os.RemoveAll(tmpDir)
|
||||
})
|
||||
err = testMap.WriteToDisk(tmpDir)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
testData := []struct {
|
||||
Path string
|
||||
@ -49,8 +50,8 @@ func Test_writeMapToDisk(t *testing.T) {
|
||||
t.Run(fmt.Sprintf("check path %s", testCase.Path), func(t *testing.T) {
|
||||
tPath := path.Join(tmpDir, testCase.Path)
|
||||
bytes, err := ioutil.ReadFile(tPath)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, testCase.ExpectedValue, string(bytes))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, testCase.ExpectedValue, string(bytes))
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -58,36 +59,57 @@ func Test_writeMapToDisk(t *testing.T) {
|
||||
func TestCPEMap_LoadFromDisk(t *testing.T) {
|
||||
t.Parallel()
|
||||
tmpDir, err := ioutil.TempDir(os.TempDir(), "test-data-*")
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() {
|
||||
os.RemoveAll(tmpDir)
|
||||
})
|
||||
|
||||
err = ioutil.WriteFile(path.Join(tmpDir, "Foo"), []byte("Bar"), 0644)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
err = ioutil.WriteFile(path.Join(tmpDir, "Hello"), []byte("World"), 0644)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
subPath := path.Join(tmpDir, "Batman")
|
||||
err = os.Mkdir(subPath, 0744)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
err = ioutil.WriteFile(path.Join(subPath, "Bruce"), []byte("Wayne"), 0644)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
err = ioutil.WriteFile(path.Join(subPath, "Test.json"), []byte("54"), 0644)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
cpe := CPEMap{}
|
||||
err = cpe.LoadFromDisk(tmpDir)
|
||||
assert.NoError(t, err)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, "Bar", cpe["Foo"])
|
||||
assert.Equal(t, "World", cpe["Hello"])
|
||||
assert.Equal(t, "Wayne", cpe["Batman/Bruce"])
|
||||
assert.Equal(t, float64(54), cpe["Batman/Test"])
|
||||
require.Equal(t, "Bar", cpe["Foo"])
|
||||
require.Equal(t, "World", cpe["Hello"])
|
||||
require.Equal(t, "Wayne", cpe["Batman/Bruce"])
|
||||
require.Equal(t, json.Number("54"), cpe["Batman/Test"])
|
||||
}
|
||||
|
||||
func TestNumbersArePassedCorrectly(t *testing.T) {
|
||||
t.Parallel()
|
||||
tmpDir, err := ioutil.TempDir(os.TempDir(), "test-data-*")
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(func() {
|
||||
os.RemoveAll(tmpDir)
|
||||
})
|
||||
|
||||
const jsonNumber = "5.5000"
|
||||
err = ioutil.WriteFile(path.Join(tmpDir, "test.json"), []byte(jsonNumber), 0644)
|
||||
require.NoError(t, err)
|
||||
|
||||
cpeMap := CPEMap{}
|
||||
err = cpeMap.LoadFromDisk(tmpDir)
|
||||
require.NoError(t, err)
|
||||
|
||||
rawJSON, err := json.Marshal(cpeMap["test"])
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, jsonNumber, string(rawJSON))
|
||||
}
|
||||
|
||||
func TestCommonPipelineEnvDirNotPresent(t *testing.T) {
|
||||
cpe := CPEMap{}
|
||||
err := cpe.LoadFromDisk("/path/does/not/exist")
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, cpe, 0)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, cpe, 0)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user