mirror of
https://github.com/mikefarah/yq.git
synced 2024-12-19 20:19:04 +00:00
e5cc57bedf
When the shell executing yq has no open stdin, os.Stdin.Stat() return nil and yq fails to continue. This commit fixes a missing verification on the result of os.Stdin.Stat() in the utils.processStdInArgs function and adds an acceptance test to cover this scenario in the future. This bug affects yq since version 4.26.1.
373 lines
7.3 KiB
Bash
Executable File
373 lines
7.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
setUp() {
|
|
rm test*.yml 2>/dev/null || true
|
|
rm .xyz 2>/dev/null || true
|
|
rm instructions.txt 2>/dev/null || true
|
|
}
|
|
|
|
testBasicEvalRoundTrip() {
|
|
./yq -n ".a = 123" > test.yml
|
|
X=$(./yq '.a' test.yml)
|
|
assertEquals 123 "$X"
|
|
}
|
|
|
|
testBasicTrailingContent() {
|
|
cat >test-trailing.yml <<EOL
|
|
test:
|
|
# this comment will be removed
|
|
EOL
|
|
|
|
read -r -d '' expected << EOM
|
|
test:
|
|
# this comment will be removed
|
|
EOM
|
|
X=$(./yq test-trailing.yml -P)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicTrailingContent() {
|
|
cat >test-trailing.yml <<EOL
|
|
test:
|
|
# this comment will be removed
|
|
EOL
|
|
|
|
read -r -d '' expected << EOM
|
|
test:
|
|
# hi
|
|
EOM
|
|
X=$(./yq '. footComment = "hi"' test-trailing.yml)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicTrailingContentEvalAll() {
|
|
cat >test-trailing.yml <<EOL
|
|
test:
|
|
# this comment will be removed
|
|
EOL
|
|
|
|
read -r -d '' expected << EOM
|
|
test:
|
|
# this comment will be removed
|
|
EOM
|
|
X=$(./yq ea test-trailing.yml -P)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicTrailingContentEvalAll() {
|
|
cat >test-trailing.yml <<EOL
|
|
test:
|
|
# this comment will be removed
|
|
EOL
|
|
|
|
read -r -d '' expected << EOM
|
|
test:
|
|
# hi
|
|
EOM
|
|
X=$(./yq ea '. footComment = "hi"' test-trailing.yml)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicPipeWithDot() {
|
|
./yq -n ".a = 123" > test.yml
|
|
X=$(cat test.yml | ./yq '.')
|
|
assertEquals "a: 123" "$X"
|
|
}
|
|
|
|
testBasicExpressionMatchesFileName() {
|
|
./yq -n ".xyz = 123" > test.yml
|
|
touch .xyz
|
|
|
|
X=$(./yq --expression '.xyz' test.yml)
|
|
assertEquals "123" "$X"
|
|
|
|
X=$(./yq ea --expression '.xyz' test.yml)
|
|
assertEquals "123" "$X"
|
|
}
|
|
|
|
testBasicExpressionFromFile() {
|
|
./yq -n ".xyz = 123" > test.yml
|
|
echo '.xyz = "meow" | .cool = "frog"' > instructions.txt
|
|
|
|
X=$(./yq --from-file instructions.txt test.yml -o=j -I=0)
|
|
assertEquals '{"xyz":"meow","cool":"frog"}' "$X"
|
|
|
|
X=$(./yq ea --from-file instructions.txt test.yml -o=j -I=0)
|
|
assertEquals '{"xyz":"meow","cool":"frog"}' "$X"
|
|
}
|
|
|
|
testBasicExpressionFromFileDos() {
|
|
./yq -n ".xyz = 123" > test.yml
|
|
echo '.xyz = "meow" | .cool = "frog"' | sed 's/$'"/`echo \\\r`/" > instructions.txt
|
|
|
|
X=$(./yq --from-file instructions.txt test.yml -o=j -I=0)
|
|
assertEquals '{"xyz":"meow","cool":"frog"}' "$X"
|
|
|
|
X=$(./yq ea --from-file instructions.txt test.yml -o=j -I=0)
|
|
assertEquals '{"xyz":"meow","cool":"frog"}' "$X"
|
|
}
|
|
|
|
testBasicGitHubAction() {
|
|
./yq -n ".a = 123" > test.yml
|
|
X=$(cat /dev/null | ./yq test.yml)
|
|
assertEquals "a: 123" "$X"
|
|
|
|
X=$(cat /dev/null | ./yq e test.yml)
|
|
assertEquals "a: 123" "$X"
|
|
|
|
X=$(cat /dev/null | ./yq ea test.yml)
|
|
assertEquals "a: 123" "$X"
|
|
}
|
|
|
|
testBasicGitHubActionWithExpression() {
|
|
./yq -n ".a = 123" > test.yml
|
|
X=$(cat /dev/null | ./yq '.a' test.yml)
|
|
assertEquals "123" "$X"
|
|
|
|
X=$(cat /dev/null | ./yq e '.a' test.yml)
|
|
assertEquals "123" "$X"
|
|
|
|
X=$(cat /dev/null | ./yq ea '.a' test.yml)
|
|
assertEquals "123" "$X"
|
|
}
|
|
|
|
|
|
testBasicEvalAllAllFiles() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(./yq ea test.yml test2.yml)
|
|
Y=$(./yq e '.' test.yml test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
# when given a file, don't read STDIN
|
|
# otherwise strange things start happening
|
|
# in scripts
|
|
# https://github.com/mikefarah/yq/issues/1115
|
|
|
|
testBasicCatWithFilesNoDash() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq test2.yml)
|
|
Y=$(./yq e '.' test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
# when the nullinput flag is used
|
|
# don't automatically read STDIN (this breaks github actions)
|
|
testBasicCreateFileGithubAction() {
|
|
cat /dev/null | ./yq -n ".a = 123" > test.yml
|
|
}
|
|
|
|
testBasicEvalAllCatWithFilesNoDash() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq ea test2.yml)
|
|
Y=$(./yq e '.' test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
testBasicCatWithFilesNoDashWithExp() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq '.a' test2.yml)
|
|
Y=$(./yq e '.a' test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
testBasicEvalAllCatWithFilesNoDashWithExp() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq ea '.a' test2.yml)
|
|
Y=$(./yq e '.a' test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
|
|
testBasicStdInWithFiles() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq - test2.yml)
|
|
Y=$(./yq e '.' test.yml test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
testBasicEvalAllStdInWithFiles() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq ea - test2.yml)
|
|
Y=$(./yq e '.' test.yml test2.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
testBasicStdInWithFilesReverse() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq test2.yml -)
|
|
Y=$(./yq e '.' test2.yml test.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
testBasicEvalAllStdInWithFilesReverse() {
|
|
./yq -n ".a = 123" > test.yml
|
|
./yq -n ".a = 124" > test2.yml
|
|
X=$(cat test.yml | ./yq ea test2.yml -)
|
|
Y=$(./yq e '.' test2.yml test.yml)
|
|
assertEquals "$Y" "$X"
|
|
}
|
|
|
|
testBasicEvalRoundTripNoEval() {
|
|
./yq -n ".a = 123" > test.yml
|
|
X=$(./yq '.a' test.yml)
|
|
assertEquals 123 "$X"
|
|
}
|
|
|
|
testBasicStdInWithOneArg() {
|
|
./yq e -n ".a = 123" > test.yml
|
|
X=$(cat test.yml | ./yq e ".a")
|
|
assertEquals 123 "$X"
|
|
|
|
X=$(cat test.yml | ./yq ea ".a")
|
|
assertEquals 123 "$X"
|
|
|
|
X=$(cat test.yml | ./yq ".a")
|
|
assertEquals 123 "$X"
|
|
}
|
|
|
|
testBasicUpdateInPlaceSequence() {
|
|
cat >test.yml <<EOL
|
|
a: 0
|
|
EOL
|
|
./yq e -i ".a = 10" test.yml
|
|
X=$(./yq e '.a' test.yml)
|
|
assertEquals "10" "$X"
|
|
}
|
|
|
|
testBasicUpdateInPlaceSequenceNoEval() {
|
|
cat >test.yml <<EOL
|
|
a: 0
|
|
EOL
|
|
./yq -i ".a = 10" test.yml
|
|
X=$(./yq '.a' test.yml)
|
|
assertEquals "10" "$X"
|
|
}
|
|
|
|
testBasicUpdateInPlaceSequenceEvalAll() {
|
|
cat >test.yml <<EOL
|
|
a: 0
|
|
EOL
|
|
./yq ea -i ".a = 10" test.yml
|
|
X=$(./yq e '.a' test.yml)
|
|
assertEquals "10" "$X"
|
|
}
|
|
|
|
testBasicUpdateInPlaceMultipleFilesNoExpressionEval() {
|
|
cat >test.yml <<EOL
|
|
a: 0
|
|
EOL
|
|
cat >test2.yml <<EOL
|
|
a: 1
|
|
EOL
|
|
read -r -d '' expected << EOM
|
|
0
|
|
---
|
|
1
|
|
EOM
|
|
./yq -i test.yml test2.yml
|
|
X=$(./yq e '.a' test.yml)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicUpdateInPlaceMultipleFilesNoExpressionEvalAll() {
|
|
cat >test.yml <<EOL
|
|
a: 0
|
|
EOL
|
|
cat >test2.yml <<EOL
|
|
a: 1
|
|
EOL
|
|
read -r -d '' expected << EOM
|
|
0
|
|
---
|
|
1
|
|
EOM
|
|
./yq -i ea test.yml test2.yml
|
|
X=$(./yq e '.a' test.yml)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicNoExitStatus() {
|
|
echo "a: cat" > test.yml
|
|
X=$(./yq e '.z' test.yml)
|
|
assertEquals "null" "$X"
|
|
}
|
|
|
|
testBasicExitStatus() {
|
|
echo "a: cat" > test.yml
|
|
X=$(./yq e -e '.z' test.yml 2&>/dev/null)
|
|
assertEquals 1 "$?"
|
|
}
|
|
|
|
testBasicExitStatusNoEval() {
|
|
echo "a: cat" > test.yml
|
|
X=$(./yq -e '.z' test.yml 2&>/dev/null)
|
|
assertEquals 1 "$?"
|
|
}
|
|
|
|
testBasicExtractFieldWithSeparator() {
|
|
cat >test.yml <<EOL
|
|
---
|
|
name: chart-name
|
|
version: 1.2.3
|
|
EOL
|
|
X=$(./yq e '.name' test.yml)
|
|
assertEquals "chart-name" "$X"
|
|
}
|
|
|
|
testBasicExtractMultipleFieldWithSeparator() {
|
|
cat >test.yml <<EOL
|
|
---
|
|
name: chart-name
|
|
version: 1.2.3
|
|
---
|
|
name: thing
|
|
version: 1.2.3
|
|
EOL
|
|
|
|
read -r -d '' expected << EOM
|
|
chart-name
|
|
---
|
|
thing
|
|
EOM
|
|
X=$(./yq e '.name' test.yml)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicMultiplyAssignMultiDoc() {
|
|
cat >test.yml <<EOL
|
|
a: 1
|
|
---
|
|
b: 2
|
|
EOL
|
|
|
|
read -r -d '' expected << EOM
|
|
a: 1
|
|
c: 3
|
|
---
|
|
b: 2
|
|
c: 3
|
|
EOM
|
|
|
|
|
|
X=$(./yq '. *= {"c":3}' test.yml)
|
|
assertEquals "$expected" "$X"
|
|
}
|
|
|
|
testBasicClosedStdIn() {
|
|
cat >test.yml <<EOL
|
|
a: 1
|
|
EOL
|
|
X=$(./yq e '.a' test.yml <&-)
|
|
assertEquals "1" "$X"
|
|
}
|
|
|
|
source ./scripts/shunit2 |