From a337df435e829aaffd99d73e7fa26631c3216e2a Mon Sep 17 00:00:00 2001 From: Clint Shryock Date: Wed, 2 Sep 2015 11:41:25 -0500 Subject: [PATCH] driver/java: update Fingerprint for Java driver --- client/driver/java.go | 43 +++++++++++++++++++++++++++++++++++++- client/driver/java_test.go | 7 ++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/client/driver/java.go b/client/driver/java.go index 856158bae..c3a07d0cb 100644 --- a/client/driver/java.go +++ b/client/driver/java.go @@ -1,6 +1,7 @@ package driver import ( + "bytes" "fmt" "io" "log" @@ -38,8 +39,48 @@ func NewJavaDriver(logger *log.Logger) Driver { } func (d *JavaDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { - // We can always do a fork/exec + // Find java version + var out bytes.Buffer + var erOut bytes.Buffer + cmd := exec.Command("java", "-version") + cmd.Stdout = &out + cmd.Stderr = &erOut + err := cmd.Run() + if err != nil { + // assume Java wasn't found + return false, fmt.Errorf("Error detecting Java version: %s", err) + } + + // 'java -version' returns output on Stderr typically. + // Check stdout, but it's probably empty + var infoString string + if out.String() != "" { + infoString = out.String() + } + + if erOut.String() != "" { + infoString = erOut.String() + } + + if infoString == "" { + return false, fmt.Errorf("Error parsing Java version information") + } + + // Assume 'java -version' returns 3 lines: + // java version "1.6.0_36" + // OpenJDK Runtime Environment (IcedTea6 1.13.8) (6b36-1.13.8-0ubuntu1~12.04) + // OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode) + // Each line is terminated by \n + + info := strings.Split(infoString, "\n") + versionString := info[0] + versionString = strings.TrimPrefix(versionString, "java version ") + versionString = strings.Trim(versionString, "\"") node.Attributes["driver.java"] = "1" + node.Attributes["driver.java.version"] = versionString + node.Attributes["driver.java.runtime"] = info[1] + node.Attributes["driver.java.vm"] = info[2] + return true, nil } diff --git a/client/driver/java_test.go b/client/driver/java_test.go index 3e095e286..a77320a23 100644 --- a/client/driver/java_test.go +++ b/client/driver/java_test.go @@ -21,9 +21,14 @@ func TestJavaDriver_Fingerprint(t *testing.T) { if !apply { t.Fatalf("should apply") } - if node.Attributes["driver.exec"] == "" { + if node.Attributes["driver.java"] != "1" { t.Fatalf("missing driver") } + for _, key := range []string{"driver.java.version", "driver.java.runtime", "driver.java.vm"} { + if node.Attributes[key] == "" { + t.Fatalf("missing driver key (%s)", key) + } + } } func TestJavaDriver_StartOpen_Wait(t *testing.T) {