diff options
author | baude <bbaude@redhat.com> | 2018-04-25 10:54:24 -0500 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-04-25 16:21:27 +0000 |
commit | 22011b428c16a8f80b8bfc3292467e34fb2d305a (patch) | |
tree | d5c6f4d137d1176a33401954473c8e82ce7985f6 /vendor/github.com/varlink/go | |
parent | bef93de431b4195eeea42d75be88a43b80f3aac7 (diff) | |
download | podman-22011b428c16a8f80b8bfc3292467e34fb2d305a.tar.gz podman-22011b428c16a8f80b8bfc3292467e34fb2d305a.tar.bz2 podman-22011b428c16a8f80b8bfc3292467e34fb2d305a.zip |
Updated varlink vendored code
Signed-off-by: baude <bbaude@redhat.com>
Closes: #670
Approved by: mheon
Diffstat (limited to 'vendor/github.com/varlink/go')
13 files changed, 42 insertions, 1106 deletions
diff --git a/vendor/github.com/varlink/go/.gitignore b/vendor/github.com/varlink/go/.gitignore deleted file mode 100644 index e69de29bb..000000000 --- a/vendor/github.com/varlink/go/.gitignore +++ /dev/null diff --git a/vendor/github.com/varlink/go/.travis.yml b/vendor/github.com/varlink/go/.travis.yml deleted file mode 100644 index 990f12e0a..000000000 --- a/vendor/github.com/varlink/go/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: go -sudo: false -go: -- '1.9' -- 1.10.x -install: -- go get golang.org/x/tools/cmd/cover -- go get github.com/mattn/goveralls -script: -- '"$HOME/gopath/bin/goveralls" -show -service=travis-ci -repotoken "$COVERALLS_TOKEN"' -env: - global: - - secure: bjxOSgBfB+YooxNTkIDHAD+/X6g56qBWoYpB1JinuS5kmt3vSjfRSuXui71sGuha7jO2FOJja8HcpjOv3UP+qmmej9276o5VWrjS1AwnI95hSQQ4JHm293Z1QeojjRaxmoKrgn7i82Hn4qNdVLQA142s+SIdqOxtN6LDs7i0Yb4IuXoiMQHbd6kAAL95o9IUFPpYAdsXoQ6xnx+TXNiSwPPeh4m5CNKuTtmGTuMGaj8tXxttFKJhZcRzvOpDuh7luc9PSVnQgYmKE/3S9ehzGV8Lk4T8eC7587DY1GdYQKt1egJSE72L+PVnmoalWROaAGHZvYWsSAeNi1UIvcFwGbXBRpq7kz3DVfIULM8V67UAaF3dGYDN3Ae825mDjN5JDfml17AoEjMjI0LlBImZLX2EWIEN225JIREHdpG9seJkaN1ClcpvEIeYuThF2MiivP1EE8/w8S80yoO5nW76Py/th16OuaEiP9LdLsbXimObUPsS9Sr8qquf/PiVqRMMpVW88oOEG5HVn4Ra5B/xVC6nPEF88tE6p9+7RSz4rOWih8QmW+6SX6eo0BI9di4L779f/WfUrddN0JLIvEnRFZZ+pVF/oo+N2INNeIMsZBvG3FVo+Zxzo6SExXnSSpuf1bp140ZdinUMACq6BqK+9gj1C9vNRmqQJaEefrqutws= diff --git a/vendor/github.com/varlink/go/Makefile b/vendor/github.com/varlink/go/Makefile deleted file mode 100644 index 3f1c0e6d6..000000000 --- a/vendor/github.com/varlink/go/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -all: - go test -v ./... -.PHONY: all diff --git a/vendor/github.com/varlink/go/cmd/varlink-go-interface-generator/generator_test.go b/vendor/github.com/varlink/go/cmd/varlink-go-interface-generator/generator_test.go deleted file mode 100644 index aa3a8565f..000000000 --- a/vendor/github.com/varlink/go/cmd/varlink-go-interface-generator/generator_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package main - -import ( - "strings" - "testing" -) - -func expect(t *testing.T, expected string, returned string) { - if strings.Compare(returned, expected) != 0 { - t.Fatalf("Expected(%d): `%s`\nGot(%d): `%s`\n", - len(expected), expected, - len(returned), returned) - } -} - -func TestIDLParser(t *testing.T) { - pkgname, b, err := generateTemplate(` -# Interface to jump a spacecraft to another point in space. The -# FTL Drive is the propulsion system to achieve faster-than-light -# travel through space. A ship making a properly calculated -# jump can arrive safely in planetary orbit, or alongside other -# ships or spaceborne objects. -interface org.example.ftl - -# The current state of the FTL drive and the amount of fuel -# available to jump. -type DriveCondition ( - state: (idle, spooling, busy), - booster: bool, - active_engines: [](id: int, state: bool), - tylium_level: int -) - -# Speed, trajectory and jump duration is calculated prior to -# activating the FTL drive. -type DriveConfiguration ( - speed: int, - trajectory: int, - duration: int -) - -# The galactic coordinates use the Sun as the origin. Galactic -# longitude is measured with primary direction from the Sun to -# the center of the galaxy in the galactic plane, while the -# galactic latitude measures the angle of the object above the -# galactic plane. -type Coordinate ( - longitude: float, - latitude: float, - distance: int -) - -# Monitor the drive. The method will reply with an update whenever -# the drive's state changes -method Monitor() -> (condition: DriveCondition) - -# Calculate the drive's jump parameters from the current -# position to the target position in the galaxy -method CalculateConfiguration( - current: Coordinate, - target: Coordinate -) -> (configuration: DriveConfiguration) - -# Jump to the calculated point in space -method Jump(configuration: DriveConfiguration) -> () - -# There is not enough tylium to jump with the given parameters -error NotEnoughEnergy () - -# The supplied parameters are outside the supported range -error ParameterOutOfRange (field: string) - -# some more coverage -method Foo(interface: string) -> (ret: (go: string, switch: bool, more: (t:bool, f:bool))) - `) - - if err != nil { - t.Fatalf("Error parsing %v", err) - } - expect(t, "orgexampleftl", pkgname) - if len(b) <= 0 { - t.Fatal("No generated go source") - } - // FIXME: compare b.String() against expected output -} diff --git a/vendor/github.com/varlink/go/cmd/varlink-go-interface-generator/main.go b/vendor/github.com/varlink/go/cmd/varlink-go-interface-generator/main.go deleted file mode 100644 index 1bcdb78de..000000000 --- a/vendor/github.com/varlink/go/cmd/varlink-go-interface-generator/main.go +++ /dev/null @@ -1,294 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "path" - "strings" - - "github.com/varlink/go/varlink/idl" -) - -var goKeywords = map[string]struct{}{ - "break": {}, - "case": {}, - "chan": {}, - "const": {}, - "continue": {}, - "default": {}, - "defer": {}, - "else": {}, - "fallthrough": {}, - "for": {}, - "func": {}, - "go": {}, - "goto": {}, - "if": {}, - "import": {}, - "interface": {}, - "map": {}, - "package": {}, - "range": {}, - "return": {}, - "select": {}, - "struct": {}, - "switch": {}, - "type": {}, - "var": {}, -} - -func sanitizeGoName(name string) string { - if _, ok := goKeywords[name]; !ok { - return name - } - return name + "_" -} - -func writeType(b *bytes.Buffer, t *idl.Type, json bool, ident int) { - switch t.Kind { - case idl.TypeBool: - b.WriteString("bool") - - case idl.TypeInt: - b.WriteString("int64") - - case idl.TypeFloat: - b.WriteString("float64") - - case idl.TypeString, idl.TypeEnum: - b.WriteString("string") - - case idl.TypeArray: - b.WriteString("[]") - writeType(b, t.ElementType, json, ident) - - case idl.TypeMaybe: - b.WriteString("*") - writeType(b, t.ElementType, json, ident) - - case idl.TypeAlias: - b.WriteString(t.Alias) - - case idl.TypeStruct: - b.WriteString("struct{\n") - for _, field := range t.Fields { - for i := 0; i < ident+1; i++ { - b.WriteString("\t") - } - - b.WriteString(strings.Title(field.Name) + " ") - writeType(b, field.Type, json, ident+1) - if json { - b.WriteString(" `json:\"" + field.Name + "\"`") - } - b.WriteString("\n") - } - for i := 0; i < ident; i++ { - b.WriteString("\t") - } - b.WriteString("}") - } -} - -func generateTemplate(description string) (string, []byte, error) { - description = strings.TrimRight(description, "\n") - - midl, err := idl.New(description) - if err != nil { - return "", nil, err - } - - pkgname := strings.Replace(midl.Name, ".", "", -1) - - var b bytes.Buffer - b.WriteString("// Generated with github.com/varlink/go/cmd/varlink-go-interface-generator\n") - b.WriteString("package " + pkgname + "\n\n") - b.WriteString(`import "github.com/varlink/go/varlink"` + "\n\n") - - // Type declarations - for _, a := range midl.Aliases { - b.WriteString("type " + a.Name + " ") - writeType(&b, a.Type, true, 0) - b.WriteString("\n\n") - } - - // Local interface with all methods - b.WriteString("type " + pkgname + "Interface interface {\n") - for _, m := range midl.Methods { - b.WriteString("\t" + m.Name + "(c VarlinkCall") - for _, field := range m.In.Fields { - b.WriteString(", " + strings.Title(field.Name) + " ") - writeType(&b, field.Type, false, 1) - } - b.WriteString(") error\n") - } - b.WriteString("}\n\n") - - // Local object with all methods - b.WriteString("type VarlinkCall struct{ varlink.Call }\n\n") - - // Reply methods for all varlink errors - for _, e := range midl.Errors { - b.WriteString("func (c *VarlinkCall) Reply" + e.Name + "(") - for i, field := range e.Type.Fields { - if i > 0 { - b.WriteString(", ") - } - b.WriteString(sanitizeGoName(field.Name) + " ") - writeType(&b, field.Type, false, 1) - } - b.WriteString(") error {\n") - if len(e.Type.Fields) > 0 { - b.WriteString("\tvar out ") - writeType(&b, e.Type, true, 1) - b.WriteString("\n") - for _, field := range e.Type.Fields { - switch field.Type.Kind { - case idl.TypeStruct, idl.TypeArray: - b.WriteString("\tout." + strings.Title(field.Name) + " = ") - writeType(&b, field.Type, true, 1) - b.WriteString("(" + sanitizeGoName(field.Name) + ")\n") - - default: - b.WriteString("\tout." + strings.Title(field.Name) + " = " + sanitizeGoName(field.Name) + "\n") - } - } - b.WriteString("\treturn c.ReplyError(\"" + midl.Name + "." + e.Name + "\", &out)\n") - } else { - b.WriteString("\treturn c.ReplyError(\"" + midl.Name + "." + e.Name + "\", nil)\n") - } - b.WriteString("}\n\n") - } - - // Reply methods for all varlink methods - for _, m := range midl.Methods { - b.WriteString("func (c *VarlinkCall) Reply" + m.Name + "(") - for i, field := range m.Out.Fields { - if i > 0 { - b.WriteString(", ") - } - b.WriteString(sanitizeGoName(field.Name) + " ") - writeType(&b, field.Type, false, 1) - } - b.WriteString(") error {\n") - if len(m.Out.Fields) > 0 { - b.WriteString("\tvar out ") - writeType(&b, m.Out, true, 1) - b.WriteString("\n") - for _, field := range m.Out.Fields { - switch field.Type.Kind { - case idl.TypeStruct, idl.TypeArray: - b.WriteString("\tout." + strings.Title(field.Name) + " = ") - writeType(&b, field.Type, true, 1) - b.WriteString("(" + sanitizeGoName(field.Name) + ")\n") - - default: - b.WriteString("\tout." + strings.Title(field.Name) + " = " + sanitizeGoName(field.Name) + "\n") - } - } - b.WriteString("\treturn c.Reply(&out)\n") - } else { - b.WriteString("\treturn c.Reply(nil)\n") - } - b.WriteString("}\n\n") - } - - // Dummy methods for all varlink methods - for _, m := range midl.Methods { - b.WriteString("func (s *VarlinkInterface) " + m.Name + "(c VarlinkCall") - for _, field := range m.In.Fields { - b.WriteString(", " + sanitizeGoName(field.Name) + " ") - writeType(&b, field.Type, false, 1) - } - b.WriteString(") error {\n" + - "\treturn c.ReplyMethodNotImplemented(\"" + m.Name + "\")\n" + - "}\n\n") - } - - // Method call dispatcher - b.WriteString("func (s *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname string) error {\n" + - "\tswitch methodname {\n") - for _, m := range midl.Methods { - b.WriteString("\tcase \"" + m.Name + "\":\n") - if len(m.In.Fields) > 0 { - b.WriteString("\t\tvar in ") - writeType(&b, m.In, true, 2) - b.WriteString("\n") - b.WriteString("\t\terr := call.GetParameters(&in)\n" + - "\t\tif err != nil {\n" + - "\t\t\treturn call.ReplyInvalidParameter(\"parameters\")\n" + - "\t\t}\n") - b.WriteString("\t\treturn s." + pkgname + "Interface." + m.Name + "(VarlinkCall{call}") - if len(m.In.Fields) > 0 { - for _, field := range m.In.Fields { - switch field.Type.Kind { - case idl.TypeStruct, idl.TypeArray: - b.WriteString(", ") - writeType(&b, field.Type, false, 2) - b.WriteString("(in." + strings.Title(field.Name) + ")") - - default: - b.WriteString(", in." + strings.Title(field.Name)) - } - } - } - b.WriteString(")\n") - } else { - b.WriteString("\t\treturn s." + pkgname + "Interface." + m.Name + "(VarlinkCall{call})\n") - } - b.WriteString("\n") - } - b.WriteString("\tdefault:\n" + - "\t\treturn call.ReplyMethodNotFound(methodname)\n" + - "\t}\n" + - "}\n") - - // Varlink interface name - b.WriteString("func (s *VarlinkInterface) VarlinkGetName() string {\n" + - "\treturn `" + midl.Name + "`\n" + "}\n\n") - - // Varlink interface description - b.WriteString("func (s *VarlinkInterface) VarlinkGetDescription() string {\n" + - "\treturn `" + midl.Description + "\n`\n}\n\n") - - b.WriteString("type VarlinkInterface struct {\n" + - "\t" + pkgname + "Interface\n" + - "}\n\n") - - b.WriteString("func VarlinkNew(m " + pkgname + "Interface) *VarlinkInterface {\n" + - "\treturn &VarlinkInterface{m}\n" + - "}\n") - - return pkgname, b.Bytes(), nil -} - -func generateFile(varlinkFile string) { - file, err := ioutil.ReadFile(varlinkFile) - if err != nil { - fmt.Fprintf(os.Stderr, "Error reading file '%s': %s\n", varlinkFile, err) - os.Exit(1) - } - - pkgname, b, err := generateTemplate(string(file)) - if err != nil { - fmt.Fprintf(os.Stderr, "Error parsing file '%s': %s\n", varlinkFile, err) - os.Exit(1) - } - - filename := path.Dir(varlinkFile) + "/" + pkgname + ".go" - err = ioutil.WriteFile(filename, b, 0660) - if err != nil { - fmt.Fprintf(os.Stderr, "Error writing file '%s': %s\n", filename, err) - os.Exit(1) - } -} - -func main() { - if len(os.Args) != 2 { - fmt.Printf("Usage: %s <file>\n", os.Args[0]) - os.Exit(1) - } - generateFile(os.Args[1]) -} diff --git a/vendor/github.com/varlink/go/cmd/varlink-go-type-generator/main.go b/vendor/github.com/varlink/go/cmd/varlink-go-type-generator/main.go deleted file mode 100644 index dfbec5fb2..000000000 --- a/vendor/github.com/varlink/go/cmd/varlink-go-type-generator/main.go +++ /dev/null @@ -1,142 +0,0 @@ -package main - -import ( - "fmt" - "go/ast" - "go/importer" - "go/parser" - "go/token" - "go/types" - "log" - "os" -) - -func GoToVarlinkType(t types.Type) string { - switch u := t.(type) { - case *types.Basic: - if u.Info()&types.IsBoolean != 0 { - return "bool" - } - if u.Info()&types.IsInteger != 0 { - return "int" - } - if u.Info()&types.IsFloat != 0 { - return "float" - } - if u.Info()&types.IsString != 0 { - return "string" - } - return fmt.Sprintf("<<<%s>>>", t.String()) - - case *types.Named: - return u.Obj().Name() - - case *types.Map: - return fmt.Sprintf("<<<%s>>>", u.String()) - - case *types.Interface: - return fmt.Sprintf("<<<%s>>>", u.String()) - - case *types.Pointer: - return fmt.Sprintf("?%s", GoToVarlinkType(u.Elem())) - - case *types.Array: - return fmt.Sprintf("[]%s", GoToVarlinkType(u.Elem())) - - case *types.Slice: - return fmt.Sprintf("[]%s", GoToVarlinkType(u.Elem())) - - default: - return fmt.Sprintf("<<<%T %s>>>", t, u) - } - - return t.String() -} - -func PrintDefsUses(name string, fset *token.FileSet, files []*ast.File) error { - conf := types.Config{ - Importer: importer.Default(), - FakeImportC: true, - } - - info := &types.Info{ - Defs: make(map[*ast.Ident]types.Object), - } - - _, err := conf.Check(name, fset, files, info) - if err != nil { - return err // type error - } - - seen := map[string]interface{}{} - - for id, obj := range info.Defs { - if obj == nil { - continue - } - - if _, ok := seen[id.Name]; ok { - continue - } - - /* - if !obj.Exported() || obj.Pkg().Name() != name { - continue - } - */ - switch f := obj.Type().Underlying().(type) { - case *types.Struct: - if f.NumFields() > 0 { - fmt.Printf("type %s (\n", id.Name) - fmt.Printf("\t%s: %s", - f.Field(0).Name(), GoToVarlinkType(f.Field(0).Type())) - for i := 1; i < f.NumFields(); i++ { - fmt.Printf(",\n\t%s: %s", - f.Field(i).Name(), GoToVarlinkType(f.Field(i).Type())) - } - fmt.Printf("\n)\n\n") - } - } - seen[id.Name] = nil - } - - return nil -} - -func main() { - - path := os.Args[1] - fs := token.NewFileSet() - - if stat, err := os.Stat(path); err == nil && stat.IsDir() { - pkgs, err := parser.ParseDir(fs, path, nil, 0) - if err != nil { - fmt.Printf("parsing dir '%s': %s", path, err) - } - for name, pkg := range pkgs { - log.Println("Found package:", name) - - fset := make([]*ast.File, len(pkg.Files), len(pkg.Files)) - idx := 0 - for _, value := range pkg.Files { - fset[idx] = value - idx++ - } - - if err := PrintDefsUses(name, fs, fset); err != nil { - log.Print(err) // type error - } - } - } else { - - fset, err := parser.ParseFile(fs, path, nil, 0) - - if err != nil { - fmt.Printf("parsing file '%s': %s", path, err) - } - name := fset.Name.String() - if err := PrintDefsUses(name, fs, []*ast.File{fset}); err != nil { - log.Print(err) // type error - } - } -} diff --git a/vendor/github.com/varlink/go/golang-github-varlink-go.spec b/vendor/github.com/varlink/go/golang-github-varlink-go.spec deleted file mode 100644 index 85f5d1788..000000000 --- a/vendor/github.com/varlink/go/golang-github-varlink-go.spec +++ /dev/null @@ -1,44 +0,0 @@ -%global goipath github.com/varlink/go -Version: 0 -%gometa - -Name: %{goname} -Release: 1%{?dist} -Summary: Go bindings for varlink -License: ASL 2.0 -URL: %{gourl} -Source0: %{gosource} - -%description -Native Go bindings for the varlink protocol. - -%package devel -Summary: %{summary} -BuildArch: noarch - -%description devel -%{summary} - -This package contains library source intended for -building other packages which use import path with -%{gobaseipath} prefix. - -%prep -%forgesetup - -%build -%gobuildroot - -%install -gofiles=$(find . %{gofindfilter} -print) -%goinstall $gofiles - -%check - -%files devel -f devel.file-list -%license LICENSE -%doc README.md - -%changelog -* Tue Mar 20 2018 <info@varlink.org> 0-1 -- Version 0 diff --git a/vendor/github.com/varlink/go/varlink/connection.go b/vendor/github.com/varlink/go/varlink/connection.go index 2445072b6..5a163b501 100644 --- a/vendor/github.com/varlink/go/varlink/connection.go +++ b/vendor/github.com/varlink/go/varlink/connection.go @@ -27,17 +27,26 @@ type Connection struct { } // Send sends a method call. -func (c *Connection) Send(method string, parameters interface{}, more bool) error { +func (c *Connection) Send(method string, parameters interface{}, more bool, oneway bool) error { type call struct { Method string `json:"method"` Parameters interface{} `json:"parameters,omitempty"` More bool `json:"more,omitempty"` - OneShot bool `json:"oneshot,omitempty"` + Oneway bool `json:"oneway,omitempty"` } + + if more && oneway { + return &Error{ + Name: "org.varlink.InvalidParameter", + Parameters: "oneway", + } + } + m := call{ Method: method, Parameters: parameters, More: more, + Oneway: oneway, } b, err := json.Marshal(m) if err != nil { @@ -54,53 +63,47 @@ func (c *Connection) Send(method string, parameters interface{}, more bool) erro } // Receive receives a method reply. -func (c *Connection) Receive(parameters interface{}, continues *bool, oneshot *bool) error { +func (c *Connection) Receive(parameters interface{}) (bool, error) { type reply struct { Parameters *json.RawMessage `json:"parameters"` Continues bool `json:"continues"` - Oneshot bool `json:"oneshot"` Error string `json:"error"` } out, err := c.reader.ReadBytes('\x00') if err != nil { - return err + return false, err } var m reply err = json.Unmarshal(out[:len(out)-1], &m) if err != nil { - return err + return false, err } if m.Error != "" { - return &Error{ + return false, &Error{ Name: m.Error, Parameters: m.Parameters, } } - if continues != nil { - *continues = m.Continues - } - if oneshot != nil { - *oneshot = m.Oneshot - } if parameters != nil && m.Parameters != nil { - return json.Unmarshal(*m.Parameters, parameters) + return m.Continues, json.Unmarshal(*m.Parameters, parameters) } - return nil + return m.Continues, nil } // Call sends a method call and returns the result of the call. func (c *Connection) Call(method string, parameters interface{}, result interface{}) error { - err := c.Send(method, ¶meters, false) + err := c.Send(method, ¶meters, false, false) if err != nil { return err } - return c.Receive(result, nil, nil) + _, err = c.Receive(result) + return err } // GetInterfaceDescription requests the interface description string from the service. diff --git a/vendor/github.com/varlink/go/varlink/external_test.go b/vendor/github.com/varlink/go/varlink/external_test.go deleted file mode 100644 index dbe4290e6..000000000 --- a/vendor/github.com/varlink/go/varlink/external_test.go +++ /dev/null @@ -1,144 +0,0 @@ -package varlink_test - -// test with no internal access - -import ( - "github.com/varlink/go/varlink" - "os" - "testing" - "time" -) - -type VarlinkInterface struct{} - -func (s *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname string) error { - return call.ReplyMethodNotImplemented(methodname) -} -func (s *VarlinkInterface) VarlinkGetName() string { - return `org.example.test` -} - -func (s *VarlinkInterface) VarlinkGetDescription() string { - return "#" -} - -type VarlinkInterface2 struct{} - -func (s *VarlinkInterface2) VarlinkDispatch(call varlink.Call, methodname string) error { - return call.ReplyMethodNotImplemented(methodname) -} -func (s *VarlinkInterface2) VarlinkGetName() string { - return `org.example.test2` -} - -func (s *VarlinkInterface2) VarlinkGetDescription() string { - return "#" -} - -func TestRegisterService(t *testing.T) { - newTestInterface := new(VarlinkInterface) - service, err := varlink.NewService( - "Varlink", - "Varlink Test", - "1", - "https://github.com/varlink/go/varlink", - ) - if err != nil { - t.Fatalf("NewService(): %v", err) - } - - if err := service.RegisterInterface(newTestInterface); err != nil { - t.Fatalf("Couldn't register service: %v", err) - } - - if err := service.RegisterInterface(newTestInterface); err == nil { - t.Fatal("Could register service twice") - } - - defer func() { service.Shutdown() }() - - servererror := make(chan error) - - go func() { - servererror <- service.Listen("unix:@varlinkexternal_TestRegisterService", 0) - }() - - time.Sleep(time.Second / 5) - - n := new(VarlinkInterface2) - - if err := service.RegisterInterface(n); err == nil { - t.Fatal("Could register service while running") - } - time.Sleep(time.Second / 5) - service.Shutdown() - - if err := <-servererror; err != nil { - t.Fatalf("service.Listen(): %v", err) - } -} - -func TestUnix(t *testing.T) { - newTestInterface := new(VarlinkInterface) - service, err := varlink.NewService( - "Varlink", - "Varlink Test", - "1", - "https://github.com/varlink/go/varlink", - ) - - if err != nil { - t.Fatalf("NewService(): %v", err) - } - - if err := service.RegisterInterface(newTestInterface); err != nil { - t.Fatalf("RegisterInterface(): %v", err) - } - - servererror := make(chan error) - - go func() { - servererror <- service.Listen("unix:varlinkexternal_TestUnix", 0) - }() - - time.Sleep(time.Second / 5) - service.Shutdown() - - if err := <-servererror; err != nil { - t.Fatalf("service.Listen(): %v", err) - } -} - -func TestListenFDSNotInt(t *testing.T) { - newTestInterface := new(VarlinkInterface) - service, err := varlink.NewService( - "Varlink", - "Varlink Test", - "1", - "https://github.com/varlink/go/varlink", - ) - - if err != nil { - t.Fatalf("NewService(): %v", err) - } - - if err := service.RegisterInterface(newTestInterface); err != nil { - t.Fatalf("Couldn't register service: %v", err) - } - os.Setenv("LISTEN_FDS", "foo") - - servererror := make(chan error) - - go func() { - servererror <- service.Listen("unix:varlinkexternal_TestListenFDSNotInt", 0) - }() - - time.Sleep(time.Second / 5) - service.Shutdown() - - err = <-servererror - - if err != nil { - t.Fatalf("service.Run(): %v", err) - } -} diff --git a/vendor/github.com/varlink/go/varlink/idl/idl.go b/vendor/github.com/varlink/go/varlink/idl/idl.go index 27f21a759..e4ba27b6b 100644 --- a/vendor/github.com/varlink/go/varlink/idl/idl.go +++ b/vendor/github.com/varlink/go/varlink/idl/idl.go @@ -13,8 +13,10 @@ const ( TypeInt TypeFloat TypeString + TypeObject TypeArray TypeMaybe + TypeMap TypeStruct TypeEnum TypeAlias @@ -277,9 +279,25 @@ func (p *parser) readType() *Type { if e == nil { return nil } + if e.Kind == TypeMaybe { + return nil + } t = &Type{Kind: TypeMaybe, ElementType: e} case '[': + var kind TypeKind + + switch p.readKeyword() { + case "string": + kind = TypeMap + + case "": + kind = TypeArray + + default: + return nil + } + if p.next() != ']' { return nil } @@ -287,7 +305,7 @@ func (p *parser) readType() *Type { if e == nil { return nil } - t = &Type{Kind: TypeArray, ElementType: e} + t = &Type{Kind: kind, ElementType: e} default: p.backup() @@ -304,6 +322,9 @@ func (p *parser) readType() *Type { case "string": t = &Type{Kind: TypeString} + + case "object": + t = &Type{Kind: TypeObject} } } else if name := p.readTypeName(); name != "" { diff --git a/vendor/github.com/varlink/go/varlink/idl/idl_test.go b/vendor/github.com/varlink/go/varlink/idl/idl_test.go deleted file mode 100644 index 5d83d5890..000000000 --- a/vendor/github.com/varlink/go/varlink/idl/idl_test.go +++ /dev/null @@ -1,127 +0,0 @@ -package idl - -import ( - "fmt" - "runtime" - "testing" -) - -/* -func expect(t *testing.T, expected string, returned string) { - if strings.Compare(returned, expected) != 0 { - t.Fatalf("Expected(%d): `%s`\nGot(%d): `%s`\n", - len(expected), expected, - len(returned), returned) - } -} -*/ - -func testParse(t *testing.T, pass bool, description string) { - _, _, line, _ := runtime.Caller(1) - - t.Run(fmt.Sprintf("Line-%d", line), func(t *testing.T) { - midl, err := New(description) - if pass { - if err != nil { - t.Fatalf("generateTemplate(`%s`): %v", description, err) - } - if len(midl.Name) <= 0 { - t.Fatalf("generateTemplate(`%s`): returned no pkgname", description) - } - } - if !pass && (err == nil) { - t.Fatalf("generateTemplate(`%s`): did not fail", description) - } - }) -} - -func TestOneMethod(t *testing.T) { - testParse(t, true, "interface foo.bar\nmethod Foo()->()") -} - -func TestOneMethodNoType(t *testing.T) { - testParse(t, false, "interface foo.bar\nmethod Foo()->(b:)") -} - -func TestDomainNames(t *testing.T) { - testParse(t, true, "interface org.varlink.service\nmethod F()->()") - testParse(t, true, "interface com.example.0example\nmethod F()->()") - testParse(t, true, "interface com.example.example-dash\nmethod F()->()") - testParse(t, true, "interface xn--lgbbat1ad8j.example.algeria\nmethod F()->()") - testParse(t, false, "interface com.-example.leadinghyphen\nmethod F()->()") - testParse(t, false, "interface com.example-.danglinghyphen-\nmethod F()->()") - testParse(t, false, "interface Com.example.uppercase-toplevel\nmethod F()->()") - testParse(t, false, "interface Co9.example.number-toplevel\nmethod F()->()") - testParse(t, false, "interface 1om.example.number-toplevel\nmethod F()->()") - testParse(t, false, "interface com.Example\nmethod F()->()") - var name string - for i := 0; i < 255; i++ { - name += "a" - } - testParse(t, false, "interface com.example.toolong"+name+"\nmethod F()->()") - testParse(t, false, "interface xn--example.toolong"+name+"\nmethod F()->()") -} - -func TestNoMethod(t *testing.T) { - testParse(t, false, ` -interface org.varlink.service - type Interface (name: string, types: []Type, methods: []Method) - type Property (key: string, value: string) -`) -} - -func TestTypeNoArgs(t *testing.T) { - testParse(t, true, "interface foo.bar\n type I ()\nmethod F()->()") -} - -func TestTypeOneArg(t *testing.T) { - testParse(t, true, "interface foo.bar\n type I (b:bool)\nmethod F()->()") -} - -func TestTypeOneArray(t *testing.T) { - testParse(t, true, "interface foo.bar\n type I (b:[]bool)\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (b:bool[ ])\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (b:bool[1])\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (b:bool[ 1 ])\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (b:bool[ 1 1 ])\nmethod F()->()") -} - -func TestFieldnames(t *testing.T) { - testParse(t, false, "interface foo.bar\n type I (Test:[]bool)\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (_test:[]bool)\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (Ă„est:[]bool)\nmethod F()->()") -} -func TestNestedStructs(t *testing.T) { - testParse(t, true, "interface foo.bar\n type I ( b: [](foo: bool, bar: bool, baz: int) )\nmethod F()->()") -} - -func TestEnum(t *testing.T) { - testParse(t, true, "interface foo.bar\n type I (b:(foo, bar, baz))\nmethod F()->()") - testParse(t, false, "interface foo.bar\n type I (foo, bar, baz : bool)\nmethod F()->()") -} - -func TestIncomplete(t *testing.T) { - testParse(t, false, "interfacef foo.bar\nmethod F()->()") - testParse(t, false, "interface foo.bar\nmethod F()->()\ntype I (b: bool") - testParse(t, false, "interface foo.bar\nmethod F()->(") - testParse(t, false, "interface foo.bar\nmethod F(") - testParse(t, false, "interface foo.bar\nmethod ()->()") - testParse(t, false, "interface foo.bar\nmethod F->()\n") - testParse(t, false, "interface foo.bar\nmethod F()->\n") - testParse(t, false, "interface foo.bar\nmethod F()>()\n") - testParse(t, false, "interface foo.bar\nmethod F()->()\ntype (b: bool)") - testParse(t, false, "interface foo.bar\nmethod F()->()\nerror (b: bool)") - testParse(t, false, "interface foo.bar\nmethod F()->()\n dfghdrg") -} - -func TestDuplicate(t *testing.T) { - testParse(t, false, ` -interface foo.example - type Device() - type Device() - type T() - type T() - method F() -> () - method F() -> () -`) -} diff --git a/vendor/github.com/varlink/go/varlink/service.go b/vendor/github.com/varlink/go/varlink/service.go index eb110e503..84a79d25b 100644 --- a/vendor/github.com/varlink/go/varlink/service.go +++ b/vendor/github.com/varlink/go/varlink/service.go @@ -152,10 +152,6 @@ func activationListener() net.Listener { return nil } - os.Unsetenv("LISTEN_PID") - os.Unsetenv("LISTEN_FDS") - os.Unsetenv("LISTEN_FDNAMES") - return listener } diff --git a/vendor/github.com/varlink/go/varlink/varlink_test.go b/vendor/github.com/varlink/go/varlink/varlink_test.go deleted file mode 100644 index e19e768a2..000000000 --- a/vendor/github.com/varlink/go/varlink/varlink_test.go +++ /dev/null @@ -1,232 +0,0 @@ -package varlink - -// tests with access to internals - -import ( - "bufio" - "bytes" - "fmt" - "strings" - "testing" -) - -func expect(t *testing.T, expected string, returned string) { - if strings.Compare(returned, expected) != 0 { - t.Fatalf("Expected(%d): `%s`\nGot(%d): `%s`\n", - len(expected), expected, - len(returned), strings.Replace(returned, "\000", "`+\"\\000\"+`", -1)) - } -} - -func TestService(t *testing.T) { - service, _ := NewService( - "Varlink", - "Varlink Test", - "1", - "https://github.com/varlink/go/varlink", - ) - - t.Run("ZeroMessage", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - if err := service.handleMessage(w, []byte{0}); err == nil { - t.Fatal("HandleMessage returned non-error") - } - }) - - t.Run("InvalidJson", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"foo.GetInterfaceDescription" fdgdfg}`) - if err := service.handleMessage(w, msg); err == nil { - t.Fatal("HandleMessage returned no error on invalid json") - } - }) - - t.Run("WrongInterface", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"foo.GetInterfaceDescription"}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatal("HandleMessage returned error on wrong interface") - } - expect(t, `{"parameters":{"interface":"foo"},"error":"org.varlink.service.InterfaceNotFound"}`+"\000", - b.String()) - }) - - t.Run("InvalidMethod", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"InvalidMethod"}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatal("HandleMessage returned error on invalid method") - } - expect(t, `{"parameters":{"parameter":"method"},"error":"org.varlink.service.InvalidParameter"}`+"\000", - b.String()) - }) - - t.Run("WrongMethod", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.varlink.service.WrongMethod"}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatal("HandleMessage returned error on wrong method") - } - expect(t, `{"parameters":{"method":"WrongMethod"},"error":"org.varlink.service.MethodNotFound"}`+"\000", - b.String()) - }) - - t.Run("GetInterfaceDescriptionNullParameters", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.varlink.service.GetInterfaceDescription","parameters": null}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"parameters":{"parameter":"parameters"},"error":"org.varlink.service.InvalidParameter"}`+"\000", - b.String()) - }) - - t.Run("GetInterfaceDescriptionNoInterface", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.varlink.service.GetInterfaceDescription","parameters":{}}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"parameters":{"parameter":"interface"},"error":"org.varlink.service.InvalidParameter"}`+"\000", - b.String()) - }) - - t.Run("GetInterfaceDescriptionWrongInterface", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.varlink.service.GetInterfaceDescription","parameters":{"interface":"foo"}}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"parameters":{"parameter":"interface"},"error":"org.varlink.service.InvalidParameter"}`+"\000", - b.String()) - }) - - t.Run("GetInterfaceDescription", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.varlink.service.GetInterfaceDescription","parameters":{"interface":"org.varlink.service"}}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"parameters":{"description":"# The Varlink Service Interface is provided by every varlink service. It\n# describes the service and the interfaces it implements.\ninterface org.varlink.service\n\n# Get a list of all the interfaces a service provides and information\n# about the implementation.\nmethod GetInfo() -\u003e (\n vendor: string,\n product: string,\n version: string,\n url: string,\n interfaces: []string\n)\n\n# Get the description of an interface that is implemented by this service.\nmethod GetInterfaceDescription(interface: string) -\u003e (description: string)\n\n# The requested interface was not found.\nerror InterfaceNotFound (interface: string)\n\n# The requested method was not found\nerror MethodNotFound (method: string)\n\n# The interface defines the requested method, but the service does not\n# implement it.\nerror MethodNotImplemented (method: string)\n\n# One of the passed parameters is invalid.\nerror InvalidParameter (parameter: string)"}}`+"\000", - b.String()) - }) - - t.Run("GetInfo", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.varlink.service.GetInfo"}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"parameters":{"vendor":"Varlink","product":"Varlink Test","version":"1","url":"https://github.com/varlink/go/varlink","interfaces":["org.varlink.service"]}}`+"\000", - b.String()) - }) -} - -type VarlinkInterface struct{} - -func (s *VarlinkInterface) VarlinkDispatch(call Call, methodname string) error { - switch methodname { - case "Ping": - if !call.WantsMore() { - return fmt.Errorf("More flag not passed") - } - if call.IsOneShot() { - return fmt.Errorf("OneShot flag set") - } - call.Continues = true - if err := call.Reply(nil); err != nil { - return err - } - if err := call.Reply(nil); err != nil { - return err - } - call.Continues = false - if err := call.Reply(nil); err != nil { - return err - } - return nil - - case "PingError": - return call.ReplyError("org.example.test.PingError", nil) - } - - call.Continues = true - if err := call.Reply(nil); err == nil { - return fmt.Errorf("call.Reply did not fail for Continues/More mismatch") - } - call.Continues = false - - if err := call.ReplyError("WrongName", nil); err == nil { - return fmt.Errorf("call.ReplyError accepted invalid error name") - } - - if err := call.ReplyError("org.varlink.service.MethodNotImplemented", nil); err == nil { - return fmt.Errorf("call.ReplyError accepted org.varlink.service error") - } - - return call.ReplyMethodNotImplemented(methodname) -} -func (s *VarlinkInterface) VarlinkGetName() string { - return `org.example.test` -} - -func (s *VarlinkInterface) VarlinkGetDescription() string { - return "#" -} - -func TestMoreService(t *testing.T) { - newTestInterface := new(VarlinkInterface) - - service, _ := NewService( - "Varlink", - "Varlink Test", - "1", - "https://github.com/varlink/go/varlink", - ) - - if err := service.RegisterInterface(newTestInterface); err != nil { - t.Fatalf("Couldn't register service: %v", err) - } - - t.Run("MethodNotImplemented", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.example.test.Pingf"}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"parameters":{"method":"Pingf"},"error":"org.varlink.service.MethodNotImplemented"}`+"\000", - b.String()) - }) - - t.Run("PingError", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.example.test.PingError", "more" : true}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"error":"org.example.test.PingError"}`+"\000", - b.String()) - }) - t.Run("MoreTest", func(t *testing.T) { - var b bytes.Buffer - w := bufio.NewWriter(&b) - msg := []byte(`{"method":"org.example.test.Ping", "more" : true}`) - if err := service.handleMessage(w, msg); err != nil { - t.Fatalf("HandleMessage returned error: %v", err) - } - expect(t, `{"continues":true}`+"\000"+`{"continues":true}`+"\000"+`{}`+"\000", - b.String()) - }) -} |