rillig / gobco

Measure branch coverage of golang tests
62 stars 12 forks source link

How to use the "gobco" to show the branch coverage of any test.go file #15

Closed BattleBird closed 4 years ago

BattleBird commented 4 years ago

Dear developer,

  I have a requirement. I want to use the following runtime_test.go file to measure the branch coverage of this test unit. The runtime_test.go is put in the

go/src/github.com/ethereum/go-ethereum/core/v.m/runtime path, this is the go-ethereum project. I just can use the "go tool cover" to measure the statements coverage. I don't know how to use the "gobco" tool to measure the branch coverage.

`package runtime

import ( "fmt" "github.com/ethereum/go-ethereum/common/hexutil" "testing"

"github.com/ethereum/go-ethereum/common"

)

func TestExecute3(t *testing.T) { var code, codeError = hexutil.Decode("0x6080604052600436106100d0576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806319449cb2146100d557806328090abb146101185780633c18d318146101a55780635e949fa0146102285780635ed7ca5b1461026b5780636fcb15001461028257806377bb09eb146102d95780638da5cb5b1461033c57806397dc97cb14610393578063a6f9dae1146103ea578063a9b1d5071461042d578063b269681d14610484578063b9b8af0b146104db578063be9a65551461050a575b600080fd5b3480156100e157600080fd5b50610116600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610521565b005b34801561012457600080fd5b506101a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105c0565b005b3480156101b157600080fd5b506101e6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610642565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023457600080fd5b50610269600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106f5565b005b34801561027757600080fd5b50610280610794565b005b34801561028e57600080fd5b50610297610866565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108e757600080fd5b5061033a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061088c565b005b34801561034857600080fd5b50610351610969565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039f57600080fd5b506103a861098e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f657600080fd5b5061042b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109b4565b005b34801561043957600080fd5b50610442610a52565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561049057600080fd5b50610499610bcd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104e757600080fd5b506104f0610bf3565b604051808215151515815260200191505060405180910390f35b34801561051657600080fd5b5061051f610c06565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561057c57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fa64da754fccf55aa65a1f0128a648633fade3884b236e879ee9f64c78df5d5d7846040518082815260200191505060405180910390a450505050565b600080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1614156106ec57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b80915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561075057600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561083f57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561084957600080fd5b6001600260146101000a81548160ff021916908315150217905550565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156108e757600080fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a0f57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610aff57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610b0957600080fd5b30610b12610c7e565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610b64573d6000803e3d6000fd5b5090507fef4c8685c12779a52dae7549eb7defa8523f67a054ad425b877a6b2da469a33181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a190565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c6157600080fd5b6000600260146101000a81548160ff021916908315150217905550565b60405161033580610c8f833901905600608060405234801561001057600080fd5b5060405160208061033583398101806040528101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506102b2806100836000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636ea056a91461004e578063c0ee0b8a146100b3575b005b34801561005a57600080fd5b50610099600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610146565b604051808215151515815260200191505060405180910390f35b3480156100bf57600080fd5b50610144600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610281565b005b600080809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633c18d318846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561020357600080fd5b505af1158015610217573d6000803e3d6000fd5b505050506040513d602081101561022d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660003660405180838380828437820191505092505050600060405180830381855af4915050905092915050565b5050505600a165627a7a7230582096d30d43ac84da6ca406f9bdb705dc4d45ae2ad120e8e63ba323e2b2edc50fb80029a165627a7a723058208a622ab443052d29e2b70988be79000000000000639ac1278c7eca1fdd4c28620d7b2be396050029") if codeError != nil { fmt.Println(codeError) } var sigName = "77bb09eb00000000000000000000000023da6277a6d2318d4de84bccd1b9a77b3a939310000000000000000000000000b433f064e905287187a21f7ed62f97dcae25005e" var input = common.Hex2Bytes(sigName) ret, _, error := Execute(code, input, nil) fmt.Println(ret) if error != nil { fmt.Println(error) } } ` BTW, I just can run "gobco sample/foo.go" in the Golang it can generate the result. I use the similar way to run "gobco runtime/runtime.go" it generate the following error information: /home/xuhang/go/src/github.com/ethereum/go-ethereum/trie/database.go:27:2: cannot find package "github.com/VictoriaMetrics/fastcache" in any of: /usr/local/go/src/github.com/VictoriaMetrics/fastcache (from $GOROOT) /tmp/gobco-c142a8d7-7221-42da-b54c-6fc43070c024/src/github.com/VictoriaMetrics/fastcache (from $GOPATH) /home/xuhang/go/src/github.com/VictoriaMetrics/fastcache /home/xuhang/go/src/github.com/ethereum/go-ethereum/common/mclock/mclock.go:23:2: cannot find package "github.com/aristanetworks/goarista/monotime" in any of: /usr/local/go/src/github.com/aristanetworks/goarista/monotime (from $GOROOT) /tmp/gobco-c142a8d7-7221-42da-b54c-6fc43070c024/src/github.com/aristanetworks/goarista/monotime (from $GOPATH) /home/xuhang/go/src/github.com/aristanetworks/goarista/monotime

Thanks for your reply in advance!:)