You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
garble/testdata/scripts/seed.txt

116 lines
2.7 KiB
Plaintext

env GOPRIVATE=test/main
env SEED1=OQg9kACEECQ
env SEED2=NruiDmVz6/s
# Check the binary with a given base64 encoded seed
garble -seed=${SEED1} build
exec ./main$exe
cmp stderr main.stderr
binsubstr main$exe 'teststring' 'imported var value'
! binsubstr main$exe 'ImportedVar'
[short] stop # the extra checks are relatively expensive
exec ./main$exe funcName
cp stderr funcName-seed-static-1
# Also check that the binary is reproducible.
# No packages should be rebuilt either, thanks to the build cache.
cp main$exe main_old$exe
rm main$exe
garble -seed=${SEED1}= build -v
! stderr .
bincmp main$exe main_old$exe
exec ./main$exe funcName
cmp stderr funcName-seed-static-1
# Also check that a different seed leads to a different binary.
# We can't know if caching happens here, because of previous test runs.
cp main$exe main_old$exe
rm main$exe
garble -seed=${SEED2} build
! bincmp main$exe main_old$exe
exec ./main$exe funcName
cp stderr funcName-seed-static-2
! bincmp funcName-seed-static-2 funcName-seed-static-1
# Use a random seed, which should always trigger a full build.
garble -seed=random build -v
stderr -count=1 '^runtime$'
stderr -count=1 '^test/main$'
exec ./main$exe
cmp stderr main.stderr
binsubstr main$exe 'teststring' 'imported var value'
! binsubstr main$exe 'ImportedVar'
exec ./main$exe funcName
cp stderr funcName-seed-random-1
! bincmp funcName-seed-random-1 funcName-seed-static-1
# Also check that the random binary is not reproducible.
cp main$exe main_old$exe
rm main$exe
garble -seed=random build -v
stderr .
! bincmp main$exe main_old$exe
exec ./main$exe funcName
cp stderr funcName-seed-random-2
! bincmp funcName-seed-random-2 funcName-seed-random-1
# Using different flags which affect the build, such as -literals or -tiny,
# should result in different obfuscation of names etc.
# There's strictly no reason to have this rule,
# but the flags result in different builds and binaries anyway,
# so we might as well make them as different as possible.
garble -seed=${SEED1} -literals build
exec ./main$exe funcName
! bincmp stderr funcName-seed-static-1
garble -seed=${SEED1} -tiny build
exec ./main$exe funcName
! bincmp stderr funcName-seed-static-1
-- go.mod --
module test/main
go 1.16
-- main.go --
package main
import (
"os"
"runtime"
"test/main/imported"
)
var teststringVar = "teststring"
func main() {
if len(os.Args) > 1 && os.Args[1] == "funcName" {
println(originalFuncName())
} else {
println(teststringVar)
println(imported.ImportedVar)
}
}
func originalFuncName() string {
pc, _, _, _ := runtime.Caller(0)
fn := runtime.FuncForPC(pc)
return fn.Name()
}
-- imported/imported.go --
package imported
var ImportedVar = "imported var value"
-- main.stderr --
teststring
imported var value