Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for Java fingerprinter on macOS #9225

Merged
merged 4 commits into from
Nov 1, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions drivers/java/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,16 @@ func (d *Driver) buildFingerprint() *drivers.Fingerprint {
return fp
}
}
if runtime.GOOS == "darwin" {
_, err := checkForMacJVM()
// return no error, as it isn't an error to not find java, it just means we
// can't use it.

fp.Health = drivers.HealthStateUndetected
fp.HealthDescription = ""
d.logger.Trace("macOS jvm not found", "error", err)
return fp
angrycub marked this conversation as resolved.
Show resolved Hide resolved
}

version, runtime, vm, err := javaVersionInfo()
if err != nil {
Expand Down
21 changes: 20 additions & 1 deletion drivers/java/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,29 @@ import (
)

var javaVersionCommand = []string{"java", "-version"}
var macOSJavaTestCommand = "/usr/libexec/java_home"

func javaVersionInfo() (version, runtime, vm string, err error) {
func checkForMacJVM() (ok bool, err error) {
// test for java differently because of the shim application
var out bytes.Buffer
cmd := exec.Command(macOSJavaTestCommand)
cmd.Stdout = &out
cmd.Stderr = &out
err = cmd.Run()
if err != nil {
err = fmt.Errorf("failed check for macOS jvm: %v, out: %v", err, strings.Replace(strings.Replace(out.String(), "\n", " ", -1), `"`, `\"`, -1))
return false, err
}
return true, nil
}

func javaVersionInfo() (version, runtime, vm string, err error) {
var out bytes.Buffer
_, err = checkForMacJVM()
if err != nil {
err = fmt.Errorf("failed to check java version: %v", err)
return
}
angrycub marked this conversation as resolved.
Show resolved Hide resolved
cmd := exec.Command(javaVersionCommand[0], javaVersionCommand[1:]...)
cmd.Stdout = &out
cmd.Stderr = &out
Expand Down