diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2017-11-01 11:24:59 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@gmail.com> | 2017-11-01 11:24:59 -0400 |
commit | a031b83a09a8628435317a03f199cdc18b78262f (patch) | |
tree | bc017a96769ce6de33745b8b0b1304ccf38e9df0 /vendor/k8s.io/kubernetes/pkg/util/dbus | |
parent | 2b74391cd5281f6fdf391ff8ad50fd1490f6bf89 (diff) | |
download | podman-a031b83a09a8628435317a03f199cdc18b78262f.tar.gz podman-a031b83a09a8628435317a03f199cdc18b78262f.tar.bz2 podman-a031b83a09a8628435317a03f199cdc18b78262f.zip |
Initial checkin from CRI-O repo
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Diffstat (limited to 'vendor/k8s.io/kubernetes/pkg/util/dbus')
-rw-r--r-- | vendor/k8s.io/kubernetes/pkg/util/dbus/dbus.go | 133 | ||||
-rw-r--r-- | vendor/k8s.io/kubernetes/pkg/util/dbus/doc.go | 18 | ||||
-rw-r--r-- | vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go | 135 |
3 files changed, 286 insertions, 0 deletions
diff --git a/vendor/k8s.io/kubernetes/pkg/util/dbus/dbus.go b/vendor/k8s.io/kubernetes/pkg/util/dbus/dbus.go new file mode 100644 index 000000000..702d16e5d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/dbus/dbus.go @@ -0,0 +1,133 @@ +/* +Copyright 2015 The Kubernetes Authors. + +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 dbus + +import ( + godbus "github.com/godbus/dbus" +) + +// Interface is an interface that presents a subset of the godbus/dbus API. Use this +// when you want to inject fakeable/mockable D-Bus behavior. +type Interface interface { + // SystemBus returns a connection to the system bus, connecting to it + // first if necessary + SystemBus() (Connection, error) + // SessionBus returns a connection to the session bus, connecting to it + // first if necessary + SessionBus() (Connection, error) +} + +// Connection represents a D-Bus connection +type Connection interface { + // Returns an Object representing the bus itself + BusObject() Object + + // Object creates a representation of a remote D-Bus object + Object(name, path string) Object + + // Signal registers or unregisters a channel to receive D-Bus signals + Signal(ch chan<- *godbus.Signal) +} + +// Object represents a remote D-Bus object +type Object interface { + // Call synchronously calls a D-Bus method + Call(method string, flags godbus.Flags, args ...interface{}) Call +} + +// Call represents a pending or completed D-Bus method call +type Call interface { + // Store returns a completed call's return values, or an error + Store(retvalues ...interface{}) error +} + +// Implements Interface in terms of actually talking to D-Bus +type dbusImpl struct { + systemBus *connImpl + sessionBus *connImpl +} + +// Implements Connection as a godbus.Conn +type connImpl struct { + conn *godbus.Conn +} + +// Implements Object as a godbus.Object +type objectImpl struct { + object godbus.BusObject +} + +// Implements Call as a godbus.Call +type callImpl struct { + call *godbus.Call +} + +// New returns a new Interface which will use godbus to talk to D-Bus +func New() Interface { + return &dbusImpl{} +} + +// SystemBus is part of Interface +func (db *dbusImpl) SystemBus() (Connection, error) { + if db.systemBus == nil { + bus, err := godbus.SystemBus() + if err != nil { + return nil, err + } + db.systemBus = &connImpl{bus} + } + + return db.systemBus, nil +} + +// SessionBus is part of Interface +func (db *dbusImpl) SessionBus() (Connection, error) { + if db.sessionBus == nil { + bus, err := godbus.SessionBus() + if err != nil { + return nil, err + } + db.sessionBus = &connImpl{bus} + } + + return db.sessionBus, nil +} + +// BusObject is part of the Connection interface +func (conn *connImpl) BusObject() Object { + return &objectImpl{conn.conn.BusObject()} +} + +// Object is part of the Connection interface +func (conn *connImpl) Object(name, path string) Object { + return &objectImpl{conn.conn.Object(name, godbus.ObjectPath(path))} +} + +// Signal is part of the Connection interface +func (conn *connImpl) Signal(ch chan<- *godbus.Signal) { + conn.conn.Signal(ch) +} + +// Call is part of the Object interface +func (obj *objectImpl) Call(method string, flags godbus.Flags, args ...interface{}) Call { + return &callImpl{obj.object.Call(method, flags, args...)} +} + +// Store is part of the Call interface +func (call *callImpl) Store(retvalues ...interface{}) error { + return call.call.Store(retvalues...) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/dbus/doc.go b/vendor/k8s.io/kubernetes/pkg/util/dbus/doc.go new file mode 100644 index 000000000..b07da628d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/dbus/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2015 The Kubernetes Authors. + +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 dbus provides an injectable interface and implementations for D-Bus communication +package dbus // import "k8s.io/kubernetes/pkg/util/dbus" diff --git a/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go b/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go new file mode 100644 index 000000000..44131272e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go @@ -0,0 +1,135 @@ +/* +Copyright 2015 The Kubernetes Authors. + +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 dbus + +import ( + "fmt" + + godbus "github.com/godbus/dbus" +) + +// DBusFake is a simple fake Interface type. +type DBusFake struct { + systemBus *DBusFakeConnection + sessionBus *DBusFakeConnection +} + +// DBusFakeConnection represents a fake D-Bus connection +type DBusFakeConnection struct { + busObject *fakeObject + objects map[string]*fakeObject + signalHandlers []chan<- *godbus.Signal +} + +// DBusFakeHandler is used to handle fake D-Bus method calls +type DBusFakeHandler func(method string, args ...interface{}) ([]interface{}, error) + +type fakeObject struct { + handler DBusFakeHandler +} + +type fakeCall struct { + ret []interface{} + err error +} + +// NewFake returns a new Interface which will fake talking to D-Bus +func NewFake(systemBus *DBusFakeConnection, sessionBus *DBusFakeConnection) *DBusFake { + return &DBusFake{systemBus, sessionBus} +} + +func NewFakeConnection() *DBusFakeConnection { + return &DBusFakeConnection{ + objects: make(map[string]*fakeObject), + } +} + +// SystemBus is part of Interface +func (db *DBusFake) SystemBus() (Connection, error) { + if db.systemBus != nil { + return db.systemBus, nil + } else { + return nil, fmt.Errorf("DBus is not running") + } +} + +// SessionBus is part of Interface +func (db *DBusFake) SessionBus() (Connection, error) { + if db.sessionBus != nil { + return db.sessionBus, nil + } else { + return nil, fmt.Errorf("DBus is not running") + } +} + +// BusObject is part of the Connection interface +func (conn *DBusFakeConnection) BusObject() Object { + return conn.busObject +} + +// Object is part of the Connection interface +func (conn *DBusFakeConnection) Object(name, path string) Object { + return conn.objects[name+path] +} + +// Signal is part of the Connection interface +func (conn *DBusFakeConnection) Signal(ch chan<- *godbus.Signal) { + for i := range conn.signalHandlers { + if conn.signalHandlers[i] == ch { + conn.signalHandlers = append(conn.signalHandlers[:i], conn.signalHandlers[i+1:]...) + return + } + } + conn.signalHandlers = append(conn.signalHandlers, ch) +} + +// SetBusObject sets the handler for the BusObject of conn +func (conn *DBusFakeConnection) SetBusObject(handler DBusFakeHandler) { + conn.busObject = &fakeObject{handler} +} + +// AddObject adds a handler for the Object at name and path +func (conn *DBusFakeConnection) AddObject(name, path string, handler DBusFakeHandler) { + conn.objects[name+path] = &fakeObject{handler} +} + +// EmitSignal emits a signal on conn +func (conn *DBusFakeConnection) EmitSignal(name, path, iface, signal string, args ...interface{}) { + sig := &godbus.Signal{ + Sender: name, + Path: godbus.ObjectPath(path), + Name: iface + "." + signal, + Body: args, + } + for _, ch := range conn.signalHandlers { + ch <- sig + } +} + +// Call is part of the Object interface +func (obj *fakeObject) Call(method string, flags godbus.Flags, args ...interface{}) Call { + ret, err := obj.handler(method, args...) + return &fakeCall{ret, err} +} + +// Store is part of the Call interface +func (call *fakeCall) Store(retvalues ...interface{}) error { + if call.err != nil { + return call.err + } + return godbus.Store(call.ret, retvalues...) +} |