From df5585b273686324e9fd8269a6492409698623ee Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Wed, 21 May 2014 15:30:10 -0700 Subject: [PATCH] vendor: bump github.com/coreos/go-systemd to v2 There are a couple of bugfixes since this was last bumped. Pull them in. Docker-DCO-1.1-Signed-off-by: Brandon Philips (github: philips) --- hack/vendor.sh | 2 +- .../coreos/go-systemd/dbus/methods.go | 46 ++++++++++- .../coreos/go-systemd/dbus/methods_test.go | 67 +++++++++------ .../coreos/go-systemd/dbus/subscription.go | 8 +- .../go-systemd/dbus/subscription_set_test.go | 5 +- .../go-systemd/dbus/subscription_test.go | 1 + .../coreos/go-systemd/journal/send.go | 2 +- .../coreos/go-systemd/login1/dbus.go | 81 +++++++++++++++++++ .../coreos/go-systemd/login1/dbus_test.go | 30 +++++++ 9 files changed, 207 insertions(+), 35 deletions(-) create mode 100644 vendor/src/github.com/coreos/go-systemd/login1/dbus.go create mode 100644 vendor/src/github.com/coreos/go-systemd/login1/dbus_test.go diff --git a/hack/vendor.sh b/hack/vendor.sh index 7f01a236c8..8084f2eb9d 100755 --- a/hack/vendor.sh +++ b/hack/vendor.sh @@ -60,4 +60,4 @@ mkdir -p src/code.google.com/p/go/src/pkg/archive mv tmp-tar src/code.google.com/p/go/src/pkg/archive/tar clone git github.com/godbus/dbus v1 -clone git github.com/coreos/go-systemd v1 +clone git github.com/coreos/go-systemd v2 diff --git a/vendor/src/github.com/coreos/go-systemd/dbus/methods.go b/vendor/src/github.com/coreos/go-systemd/dbus/methods.go index 11d5cda945..a60de059e6 100644 --- a/vendor/src/github.com/coreos/go-systemd/dbus/methods.go +++ b/vendor/src/github.com/coreos/go-systemd/dbus/methods.go @@ -204,7 +204,7 @@ func (c *Conn) GetUnitTypeProperties(unit string, unitType string) (map[string]i // to modify. properties are the settings to set, encoded as an array of property // name and value pairs. func (c *Conn) SetUnitProperties(name string, runtime bool, properties ...Property) error { - return c.sysobj.Call("SetUnitProperties", 0, name, runtime, properties).Store() + return c.sysobj.Call("org.freedesktop.systemd1.Manager.SetUnitProperties", 0, name, runtime, properties).Store() } func (c *Conn) GetUnitTypeProperty(unit string, unitType string, propertyName string) (*Property, error) { @@ -253,6 +253,48 @@ type UnitStatus struct { JobPath dbus.ObjectPath // The job object path } +type LinkUnitFileChange EnableUnitFileChange + +// LinkUnitFiles() links unit files (that are located outside of the +// usual unit search paths) into the unit search path. +// +// It takes a list of absolute paths to unit files to link and two +// booleans. The first boolean controls whether the unit shall be +// enabled for runtime only (true, /run), or persistently (false, +// /etc). +// The second controls whether symlinks pointing to other units shall +// be replaced if necessary. +// +// This call returns a list of the changes made. The list consists of +// structures with three strings: the type of the change (one of symlink +// or unlink), the file name of the symlink and the destination of the +// symlink. +func (c *Conn) LinkUnitFiles(files []string, runtime bool, force bool) ([]LinkUnitFileChange, error) { + result := make([][]interface{}, 0) + err := c.sysobj.Call("org.freedesktop.systemd1.Manager.LinkUnitFiles", 0, files, runtime, force).Store(&result) + if err != nil { + return nil, err + } + + resultInterface := make([]interface{}, len(result)) + for i := range result { + resultInterface[i] = result[i] + } + + changes := make([]LinkUnitFileChange, len(result)) + changesInterface := make([]interface{}, len(changes)) + for i := range changes { + changesInterface[i] = &changes[i] + } + + err = dbus.Store(resultInterface, changesInterface...) + if err != nil { + return nil, err + } + + return changes, nil +} + // EnableUnitFiles() may be used to enable one or more units in the system (by // creating symlinks to them in /etc or /run). // @@ -317,7 +359,7 @@ type EnableUnitFileChange struct { // symlink. func (c *Conn) DisableUnitFiles(files []string, runtime bool) ([]DisableUnitFileChange, error) { result := make([][]interface{}, 0) - err := c.sysobj.Call("DisableUnitFiles", 0, files, runtime).Store(&result) + err := c.sysobj.Call("org.freedesktop.systemd1.Manager.DisableUnitFiles", 0, files, runtime).Store(&result) if err != nil { return nil, err } diff --git a/vendor/src/github.com/coreos/go-systemd/dbus/methods_test.go b/vendor/src/github.com/coreos/go-systemd/dbus/methods_test.go index d943e7ebfc..8c7ab93eb3 100644 --- a/vendor/src/github.com/coreos/go-systemd/dbus/methods_test.go +++ b/vendor/src/github.com/coreos/go-systemd/dbus/methods_test.go @@ -36,36 +36,38 @@ func setupConn(t *testing.T) *Conn { return conn } +func findFixture(target string, t *testing.T) string { + abs, err := filepath.Abs("../fixtures/" + target) + if err != nil { + t.Fatal(err) + } + return abs +} + func setupUnit(target string, conn *Conn, t *testing.T) { // Blindly stop the unit in case it is running conn.StopUnit(target, "replace") // Blindly remove the symlink in case it exists targetRun := filepath.Join("/run/systemd/system/", target) - err := os.Remove(targetRun) - - // 1. Enable the unit - abs, err := filepath.Abs("../fixtures/" + target) - if err != nil { - t.Fatal(err) - } + os.Remove(targetRun) +} +func linkUnit(target string, conn *Conn, t *testing.T) { + abs := findFixture(target, t) fixture := []string{abs} - install, changes, err := conn.EnableUnitFiles(fixture, true, true) + changes, err := conn.LinkUnitFiles(fixture, true, true) if err != nil { t.Fatal(err) } - if install != false { - t.Fatal("Install was true") - } - if len(changes) < 1 { t.Fatalf("Expected one change, got %v", changes) } - if changes[0].Filename != targetRun { + runPath := filepath.Join("/run/systemd/system/", target) + if changes[0].Filename != runPath { t.Fatal("Unexpected target filename") } } @@ -76,6 +78,7 @@ func TestStartStopUnit(t *testing.T) { conn := setupConn(t) setupUnit(target, conn, t) + linkUnit(target, conn, t) // 2. Start the unit job, err := conn.StartUnit(target, "replace") @@ -84,7 +87,7 @@ func TestStartStopUnit(t *testing.T) { } if job != "done" { - t.Fatal("Job is not done, %v", job) + t.Fatal("Job is not done:", job) } units, err := conn.ListUnits() @@ -130,28 +133,41 @@ func TestEnableDisableUnit(t *testing.T) { conn := setupConn(t) setupUnit(target, conn, t) + abs := findFixture(target, t) + runPath := filepath.Join("/run/systemd/system/", target) - abs, err := filepath.Abs("../fixtures/" + target) + // 1. Enable the unit + install, changes, err := conn.EnableUnitFiles([]string{abs}, true, true) if err != nil { t.Fatal(err) } - path := filepath.Join("/run/systemd/system/", target) + if install != false { + t.Fatal("Install was true") + } + + if len(changes) < 1 { + t.Fatalf("Expected one change, got %v", changes) + } + + if changes[0].Filename != runPath { + t.Fatal("Unexpected target filename") + } // 2. Disable the unit - changes, err := conn.DisableUnitFiles([]string{abs}, true) + dChanges, err := conn.DisableUnitFiles([]string{abs}, true) if err != nil { t.Fatal(err) } - if len(changes) != 1 { - t.Fatalf("Changes should include the path, %v", changes) + if len(dChanges) != 1 { + t.Fatalf("Changes should include the path, %v", dChanges) } - if changes[0].Filename != path { - t.Fatalf("Change should include correct filename, %+v", changes[0]) + if dChanges[0].Filename != runPath { + t.Fatalf("Change should include correct filename, %+v", dChanges[0]) } - if changes[0].Destination != "" { - t.Fatalf("Change destination should be empty, %+v", changes[0]) + if dChanges[0].Destination != "" { + t.Fatalf("Change destination should be empty, %+v", dChanges[0]) } } @@ -230,7 +246,7 @@ func TestSetUnitProperties(t *testing.T) { value := info["CPUShares"].(uint64) if value != 1023 { - t.Fatal("CPUShares of unit is not 1023, %s", value) + t.Fatal("CPUShares of unit is not 1023:", value) } } @@ -250,7 +266,7 @@ func TestStartStopTransientUnit(t *testing.T) { } if job != "done" { - t.Fatal("Job is not done, %v", job) + t.Fatal("Job is not done:", job) } units, err := conn.ListUnits() @@ -295,6 +311,7 @@ func TestConnJobListener(t *testing.T) { conn := setupConn(t) setupUnit(target, conn, t) + linkUnit(target, conn, t) jobSize := len(conn.jobListener.jobs) diff --git a/vendor/src/github.com/coreos/go-systemd/dbus/subscription.go b/vendor/src/github.com/coreos/go-systemd/dbus/subscription.go index 3d896d896f..fcd29b6e8f 100644 --- a/vendor/src/github.com/coreos/go-systemd/dbus/subscription.go +++ b/vendor/src/github.com/coreos/go-systemd/dbus/subscription.go @@ -40,7 +40,6 @@ func (c *Conn) Subscribe() error { err := c.sysobj.Call("org.freedesktop.systemd1.Manager.Subscribe", 0).Store() if err != nil { - c.sysconn.Close() return err } @@ -51,7 +50,6 @@ func (c *Conn) Subscribe() error { func (c *Conn) Unsubscribe() error { err := c.sysobj.Call("org.freedesktop.systemd1.Manager.Unsubscribe", 0).Store() if err != nil { - c.sysconn.Close() return err } @@ -69,7 +67,11 @@ func (c *Conn) initDispatch() { go func() { for { - signal := <-ch + signal, ok := <-ch + if !ok { + return + } + switch signal.Name { case "org.freedesktop.systemd1.Manager.JobRemoved": c.jobComplete(signal) diff --git a/vendor/src/github.com/coreos/go-systemd/dbus/subscription_set_test.go b/vendor/src/github.com/coreos/go-systemd/dbus/subscription_set_test.go index db600850c2..4ecd15376d 100644 --- a/vendor/src/github.com/coreos/go-systemd/dbus/subscription_set_test.go +++ b/vendor/src/github.com/coreos/go-systemd/dbus/subscription_set_test.go @@ -25,6 +25,7 @@ func TestSubscriptionSetUnit(t *testing.T) { subSet.Add(target) setupUnit(target, conn, t) + linkUnit(target, conn, t) job, err := conn.StartUnit(target, "replace") if err != nil { @@ -47,7 +48,7 @@ func TestSubscriptionSetUnit(t *testing.T) { tCh, ok := changes[target] if !ok { - t.Fatal("Unexpected event %v", changes) + t.Fatal("Unexpected event:", changes) } if tCh.ActiveState == "active" && tCh.Name == target { @@ -63,5 +64,3 @@ func TestSubscriptionSetUnit(t *testing.T) { success: return } - - diff --git a/vendor/src/github.com/coreos/go-systemd/dbus/subscription_test.go b/vendor/src/github.com/coreos/go-systemd/dbus/subscription_test.go index 6f4d0b32a6..f2b5dfc28c 100644 --- a/vendor/src/github.com/coreos/go-systemd/dbus/subscription_test.go +++ b/vendor/src/github.com/coreos/go-systemd/dbus/subscription_test.go @@ -47,6 +47,7 @@ func TestSubscribeUnit(t *testing.T) { evChan, errChan := conn.SubscribeUnits(time.Second) setupUnit(target, conn, t) + linkUnit(target, conn, t) job, err := conn.StartUnit(target, "replace") if err != nil { diff --git a/vendor/src/github.com/coreos/go-systemd/journal/send.go b/vendor/src/github.com/coreos/go-systemd/journal/send.go index a29bcbf0fa..b52e120988 100644 --- a/vendor/src/github.com/coreos/go-systemd/journal/send.go +++ b/vendor/src/github.com/coreos/go-systemd/journal/send.go @@ -119,7 +119,7 @@ func appendVariable(w io.Writer, name, value string) { fmt.Fprintln(w, value) } else { /* just write the variable and value all on one line */ - fmt.Fprintln(w, "%s=%s", name, value) + fmt.Fprintf(w, "%s=%s\n", name, value) } } diff --git a/vendor/src/github.com/coreos/go-systemd/login1/dbus.go b/vendor/src/github.com/coreos/go-systemd/login1/dbus.go new file mode 100644 index 0000000000..d00dd110b5 --- /dev/null +++ b/vendor/src/github.com/coreos/go-systemd/login1/dbus.go @@ -0,0 +1,81 @@ +/* +Copyright 2014 CoreOS Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Integration with the systemd logind API. See http://www.freedesktop.org/wiki/Software/systemd/logind/ +package login1 + +import ( + "os" + "strconv" + + "github.com/godbus/dbus" +) + +const ( + dbusInterface = "org.freedesktop.login1.Manager" + dbusPath = "/org/freedesktop/login1" +) + +// Conn is a connection to systemds dbus endpoint. +type Conn struct { + conn *dbus.Conn + object *dbus.Object +} + +// New() establishes a connection to the system bus and authenticates. +func New() (*Conn, error) { + c := new(Conn) + + if err := c.initConnection(); err != nil { + return nil, err + } + + return c, nil +} + +func (c *Conn) initConnection() error { + var err error + c.conn, err = dbus.SystemBusPrivate() + if err != nil { + return err + } + + // Only use EXTERNAL method, and hardcode the uid (not username) + // to avoid a username lookup (which requires a dynamically linked + // libc) + methods := []dbus.Auth{dbus.AuthExternal(strconv.Itoa(os.Getuid()))} + + err = c.conn.Auth(methods) + if err != nil { + c.conn.Close() + return err + } + + err = c.conn.Hello() + if err != nil { + c.conn.Close() + return err + } + + c.object = c.conn.Object("org.freedesktop.login1", dbus.ObjectPath(dbusPath)) + + return nil +} + +// Reboot asks logind for a reboot optionally asking for auth. +func (c *Conn) Reboot(askForAuth bool) { + c.object.Call(dbusInterface+".Reboot", 0, askForAuth) +} diff --git a/vendor/src/github.com/coreos/go-systemd/login1/dbus_test.go b/vendor/src/github.com/coreos/go-systemd/login1/dbus_test.go new file mode 100644 index 0000000000..4439d37380 --- /dev/null +++ b/vendor/src/github.com/coreos/go-systemd/login1/dbus_test.go @@ -0,0 +1,30 @@ +/* +Copyright 2014 CoreOS Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package login1 + +import ( + "testing" +) + +// TestNew ensures that New() works without errors. +func TestNew(t *testing.T) { + _, err := New() + + if err != nil { + t.Fatal(err) + } +}