From 9f607f1ff3f91e4da89185e02a832fd9b4e0b650 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 15 Mar 2018 09:20:41 +0100 Subject: [PATCH 1/6] snap, store: store version numbers in the commands database --- advisor/backend.go | 13 ++++++++----- advisor/cmdfinder.go | 1 + advisor/cmdfinder_test.go | 18 +++++++++--------- advisor/pkgfinder.go | 1 + overlord/snapstate/catalogrefresh_test.go | 10 +++++----- store/store.go | 5 +++-- store/store_test.go | 14 ++++++++------ 7 files changed, 35 insertions(+), 27 deletions(-) diff --git a/advisor/backend.go b/advisor/backend.go index ab6baee0e51..542377e494e 100644 --- a/advisor/backend.go +++ b/advisor/backend.go @@ -20,6 +20,7 @@ package advisor import ( + "fmt" "strings" "time" @@ -43,7 +44,7 @@ type writer struct { type CommandDB interface { // AddSnap adds the entries for commands pointing to the given // snap name to the commands database. - AddSnap(snapName, summary string, commands []string) error + AddSnap(snapName, version, summary string, commands []string) error // Commit persist the changes, and closes the database. If the // database has already been committed/rollbacked, does nothing. Commit() error @@ -96,8 +97,8 @@ func Create() (CommandDB, error) { return t, nil } -func (t *writer) AddSnap(snapName, summary string, commands []string) error { - bname := []byte(snapName) +func (t *writer) AddSnap(snapName, version, summary string, commands []string) error { + bname := []byte(fmt.Sprintf("%s/%s", snapName, version)) for _, cmd := range commands { bcmd := []byte(cmd) @@ -219,8 +220,10 @@ func (f *boltFinder) FindCommand(command string) ([]Command, error) { snaps := strings.Split(string(buf), ",") cmds := make([]Command, len(snaps)) for i, snap := range snaps { + l := strings.SplitN(snap, "/", 2) cmds[i] = Command{ - Snap: snap, + Snap: l[0], + Version: l[1], Command: command, } } @@ -245,5 +248,5 @@ func (f *boltFinder) FindPackage(pkgName string) (*Package, error) { return nil, nil } - return &Package{Snap: pkgName, Summary: string(bsummary)}, nil + return &Package{Snap: pkgName, Version: "", Summary: string(bsummary)}, nil } diff --git a/advisor/cmdfinder.go b/advisor/cmdfinder.go index 15d50eb388a..59489198970 100644 --- a/advisor/cmdfinder.go +++ b/advisor/cmdfinder.go @@ -21,6 +21,7 @@ package advisor type Command struct { Snap string + Version string `json:"Version,omitempty"` Command string } diff --git a/advisor/cmdfinder_test.go b/advisor/cmdfinder_test.go index da8c1028c19..503fb2d0696 100644 --- a/advisor/cmdfinder_test.go +++ b/advisor/cmdfinder_test.go @@ -44,8 +44,8 @@ func (s *cmdfinderSuite) SetUpTest(c *C) { db, err := advisor.Create() c.Assert(err, IsNil) - c.Assert(db.AddSnap("foo", "foo summary", []string{"foo", "meh"}), IsNil) - c.Assert(db.AddSnap("bar", "bar summary", []string{"bar", "meh"}), IsNil) + c.Assert(db.AddSnap("foo", "1.0", "foo summary", []string{"foo", "meh"}), IsNil) + c.Assert(db.AddSnap("bar", "2.0", "bar summary", []string{"bar", "meh"}), IsNil) c.Assert(db.Commit(), IsNil) } @@ -99,8 +99,8 @@ func (s *cmdfinderSuite) TestFindCommandHit(c *C) { cmds, err := advisor.FindCommand("meh") c.Assert(err, IsNil) c.Check(cmds, DeepEquals, []advisor.Command{ - {Snap: "foo", Command: "meh"}, - {Snap: "bar", Command: "meh"}, + {Snap: "foo", Version: "1.0", Command: "meh"}, + {Snap: "bar", Version: "2.0", Command: "meh"}, }) } @@ -114,8 +114,8 @@ func (s *cmdfinderSuite) TestFindMisspelledCommandHit(c *C) { cmds, err := advisor.FindMisspelledCommand("moh") c.Assert(err, IsNil) c.Check(cmds, DeepEquals, []advisor.Command{ - {Snap: "foo", Command: "meh"}, - {Snap: "bar", Command: "meh"}, + {Snap: "foo", Version: "1.0", Command: "meh"}, + {Snap: "bar", Version: "2.0", Command: "meh"}, }) } @@ -129,8 +129,8 @@ func (s *cmdfinderSuite) TestDumpCommands(c *C) { cmds, err := advisor.DumpCommands() c.Assert(err, IsNil) c.Check(cmds, DeepEquals, map[string][]string{ - "foo": {"foo"}, - "bar": {"bar"}, - "meh": {"foo", "bar"}, + "foo": {"foo/1.0"}, + "bar": {"bar/2.0"}, + "meh": {"foo/1.0", "bar/2.0"}, }) } diff --git a/advisor/pkgfinder.go b/advisor/pkgfinder.go index 43dd143203d..7e950c761e4 100644 --- a/advisor/pkgfinder.go +++ b/advisor/pkgfinder.go @@ -21,6 +21,7 @@ package advisor type Package struct { Snap string + Version string Summary string } diff --git a/overlord/snapstate/catalogrefresh_test.go b/overlord/snapstate/catalogrefresh_test.go index 3d73657b34d..4cf68b009d2 100644 --- a/overlord/snapstate/catalogrefresh_test.go +++ b/overlord/snapstate/catalogrefresh_test.go @@ -45,8 +45,8 @@ type catalogStore struct { func (r *catalogStore) WriteCatalogs(w io.Writer, a store.SnapAdder) error { r.ops = append(r.ops, "write-catalog") w.Write([]byte("pkg1\npkg2")) - a.AddSnap("foo", "foo summary", []string{"foo", "meh"}) - a.AddSnap("bar", "bar summray", []string{"bar", "meh"}) + a.AddSnap("foo", "1.0", "foo summary", []string{"foo", "meh"}) + a.AddSnap("bar", "2.0", "bar summray", []string{"bar", "meh"}) return nil } @@ -98,9 +98,9 @@ func (s *catalogRefreshTestSuite) TestCatalogRefresh(c *C) { dump, err := advisor.DumpCommands() c.Assert(err, IsNil) c.Check(dump, DeepEquals, map[string][]string{ - "foo": {"foo"}, - "bar": {"bar"}, - "meh": {"foo", "bar"}, + "foo": {"foo/1.0"}, + "bar": {"bar/2.0"}, + "meh": {"foo/1.0", "bar/2.0"}, }) } diff --git a/store/store.go b/store/store.go index 190c212ce16..8d29c8016fc 100644 --- a/store/store.go +++ b/store/store.go @@ -640,13 +640,14 @@ type alias struct { type catalogItem struct { Name string `json:"package_name"` + Version string `json:"version"` Summary string `json:"summary"` Aliases []alias `json:"aliases"` Apps []string `json:"apps"` } type SnapAdder interface { - AddSnap(snapName, summary string, commands []string) error + AddSnap(snapName, version, summary string, commands []string) error } func decodeCatalog(resp *http.Response, names io.Writer, db SnapAdder) error { @@ -687,7 +688,7 @@ func decodeCatalog(resp *http.Response, names io.Writer, db SnapAdder) error { commands = append(commands, snap.JoinSnapApp(v.Name, app)) } - if err := db.AddSnap(v.Name, v.Summary, commands); err != nil { + if err := db.AddSnap(v.Name, v.Version, v.Summary, commands); err != nil { return err } } diff --git a/store/store_test.go b/store/store_test.go index eef365b85b4..61464e807bf 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -2821,12 +2821,14 @@ const mockNamesJSON = ` "apps": ["baz"], "title": "a title", "summary": "oneary plus twoary", - "package_name": "bar" + "package_name": "bar", + "version": "2.0" }, { "aliases": [{"name": "meh", "target": "foo"}], "apps": ["foo"], - "package_name": "foo" + "package_name": "foo", + "version": "1.0" } ] } @@ -2885,10 +2887,10 @@ func (s *storeTestSuite) testSnapCommands(c *C, onClassic bool) { dump, err := advisor.DumpCommands() c.Assert(err, IsNil) c.Check(dump, DeepEquals, map[string][]string{ - "foo": {"foo"}, - "bar.baz": {"bar"}, - "potato": {"bar"}, - "meh": {"bar", "foo"}, + "foo": {"foo/1.0"}, + "bar.baz": {"bar/2.0"}, + "potato": {"bar/2.0"}, + "meh": {"bar/2.0", "foo/1.0"}, }) } From 63858fa2c95e6e40069a1b59ee439362aec231df Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Wed, 4 Apr 2018 17:48:15 +0200 Subject: [PATCH 2/6] advisor: use json in the bolt-db --- advisor/backend.go | 49 +++++++++++++++++++++++++-------------- advisor/cmdfinder_test.go | 8 +++---- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/advisor/backend.go b/advisor/backend.go index b6d9f7439f8..cd879a602e8 100644 --- a/advisor/backend.go +++ b/advisor/backend.go @@ -20,9 +20,9 @@ package advisor import ( + "encoding/json" "fmt" "os" - "strings" "time" "github.com/snapcore/bolt" @@ -36,6 +36,15 @@ var ( pkgBucketKey = []byte("Snaps") ) +type snapInfo struct { + Name string `json:"name"` + Version string `json:"version"` +} + +func (si *snapInfo) String() string { + return fmt.Sprintf("%s/%s", si.Name, si.Version) +} + type writer struct { db *bolt.DB tx *bolt.Tx @@ -100,15 +109,20 @@ func Create() (CommandDB, error) { } func (t *writer) AddSnap(snapName, version, summary string, commands []string) error { - bname := []byte(fmt.Sprintf("%s/%s", snapName, version)) - for _, cmd := range commands { + var sil []snapInfo + bcmd := []byte(cmd) row := t.cmdBucket.Get(bcmd) - if row == nil { - row = bname - } else { - row = append(append(row, ','), bname...) + if row != nil { + if err := json.Unmarshal(row, &sil); err != nil { + return err + } + } + sil = append(sil, snapInfo{Name: snapName, Version: version}) + row, err := json.Marshal(sil) + if err != nil { + return err } if err := t.cmdBucket.Put(bcmd, row); err != nil { return err @@ -155,7 +169,7 @@ func (t *writer) done(commit bool) error { // DumpCommands returns the whole database as a map. For use in // testing and debugging. -func DumpCommands() (map[string][]string, error) { +func DumpCommands() (map[string]string, error) { db, err := bolt.Open(dirs.SnapCommandsDB, 0644, &bolt.Options{ ReadOnly: true, Timeout: 1 * time.Second, @@ -176,10 +190,10 @@ func DumpCommands() (map[string][]string, error) { return nil, nil } - m := map[string][]string{} + m := map[string]string{} c := b.Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { - m[string(k)] = strings.Split(string(v), ",") + m[string(k)] = string(v) } return m, nil @@ -225,14 +239,15 @@ func (f *boltFinder) FindCommand(command string) ([]Command, error) { if buf == nil { return nil, nil } - - snaps := strings.Split(string(buf), ",") - cmds := make([]Command, len(snaps)) - for i, snap := range snaps { - l := strings.SplitN(snap, "/", 2) + var sil []snapInfo + if err := json.Unmarshal(buf, &sil); err != nil { + return nil, err + } + cmds := make([]Command, len(sil)) + for i, si := range sil { cmds[i] = Command{ - Snap: l[0], - Version: l[1], + Snap: si.Name, + Version: si.Version, Command: command, } } diff --git a/advisor/cmdfinder_test.go b/advisor/cmdfinder_test.go index 4b768fb2382..1a2cdbe71d3 100644 --- a/advisor/cmdfinder_test.go +++ b/advisor/cmdfinder_test.go @@ -128,10 +128,10 @@ func (s *cmdfinderSuite) TestFindMisspelledCommandMiss(c *C) { func (s *cmdfinderSuite) TestDumpCommands(c *C) { cmds, err := advisor.DumpCommands() c.Assert(err, IsNil) - c.Check(cmds, DeepEquals, map[string][]string{ - "foo": {"foo/1.0"}, - "bar": {"bar/2.0"}, - "meh": {"foo/1.0", "bar/2.0"}, + c.Check(cmds, DeepEquals, map[string]string{ + "foo": `[{"name":"foo","version":"1.0"}]`, + "bar": `[{"name":"bar","version":"2.0"}]`, + "meh": `[{"name":"foo","version":"1.0"},{"name":"bar","version":"2.0"}]`, }) } From 1f0fdf504b894b9a18b87e219dbe73076b02e59b Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 5 Apr 2018 08:34:29 +0200 Subject: [PATCH 3/6] advisor,overlord: fix tests, remove some dead code --- advisor/backend.go | 7 ++----- overlord/snapstate/catalogrefresh_test.go | 10 +++++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/advisor/backend.go b/advisor/backend.go index cd879a602e8..c035f628611 100644 --- a/advisor/backend.go +++ b/advisor/backend.go @@ -21,7 +21,6 @@ package advisor import ( "encoding/json" - "fmt" "os" "time" @@ -36,15 +35,12 @@ var ( pkgBucketKey = []byte("Snaps") ) +// snapInfo contains information about what snap provides a command type snapInfo struct { Name string `json:"name"` Version string `json:"version"` } -func (si *snapInfo) String() string { - return fmt.Sprintf("%s/%s", si.Name, si.Version) -} - type writer struct { db *bolt.DB tx *bolt.Tx @@ -129,6 +125,7 @@ func (t *writer) AddSnap(snapName, version, summary string, commands []string) e } } + // TODO: use json here as well and put the version information here if err := t.pkgBucket.Put([]byte(snapName), []byte(summary)); err != nil { return err } diff --git a/overlord/snapstate/catalogrefresh_test.go b/overlord/snapstate/catalogrefresh_test.go index 35b93ef519c..73c74d3b5f3 100644 --- a/overlord/snapstate/catalogrefresh_test.go +++ b/overlord/snapstate/catalogrefresh_test.go @@ -1,7 +1,7 @@ // -*- Mode: Go; indent-tabs-mode: t -*- /* - * Copyright (C) 2017 Canonical Ltd + * Copyright (C) 2017-2018 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as @@ -105,10 +105,10 @@ func (s *catalogRefreshTestSuite) TestCatalogRefresh(c *C) { c.Check(osutil.FileExists(dirs.SnapCommandsDB), Equals, true) dump, err := advisor.DumpCommands() c.Assert(err, IsNil) - c.Check(dump, DeepEquals, map[string][]string{ - "foo": {"foo/1.0"}, - "bar": {"bar/2.0"}, - "meh": {"foo/1.0", "bar/2.0"}, + c.Check(dump, DeepEquals, map[string]string{ + "foo": `[{"name":"foo","version":"1.0"}]`, + "bar": `[{"name":"bar","version":"2.0"}]`, + "meh": `[{"name":"foo","version":"1.0"},{"name":"bar","version":"2.0"}]`, }) } From 116465b755f5fddc18afb04c9b09d8bdada79879 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 5 Apr 2018 08:49:04 +0200 Subject: [PATCH 4/6] advisor: make package database use json as well --- advisor/backend.go | 22 +++++++++++++++++---- advisor/pkgfinder_test.go | 40 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 advisor/pkgfinder_test.go diff --git a/advisor/backend.go b/advisor/backend.go index c035f628611..f2e83173af9 100644 --- a/advisor/backend.go +++ b/advisor/backend.go @@ -39,6 +39,7 @@ var ( type snapInfo struct { Name string `json:"name"` Version string `json:"version"` + Summary string `json:"summary,omitempty"` } type writer struct { @@ -126,7 +127,15 @@ func (t *writer) AddSnap(snapName, version, summary string, commands []string) e } // TODO: use json here as well and put the version information here - if err := t.pkgBucket.Put([]byte(snapName), []byte(summary)); err != nil { + bj, err := json.Marshal(snapInfo{ + Name: snapName, + Version: version, + Summary: summary, + }) + if err != nil { + return err + } + if err := t.pkgBucket.Put([]byte(snapName), bj); err != nil { return err } @@ -264,10 +273,15 @@ func (f *boltFinder) FindPackage(pkgName string) (*Package, error) { return nil, nil } - bsummary := b.Get([]byte(pkgName)) - if bsummary == nil { + bj := b.Get([]byte(pkgName)) + if bj == nil { return nil, nil } + var si snapInfo + err = json.Unmarshal(bj, &si) + if err != nil { + return nil, err + } - return &Package{Snap: pkgName, Version: "", Summary: string(bsummary)}, nil + return &Package{Snap: pkgName, Version: si.Version, Summary: si.Summary}, nil } diff --git a/advisor/pkgfinder_test.go b/advisor/pkgfinder_test.go new file mode 100644 index 00000000000..fd08017bf8f --- /dev/null +++ b/advisor/pkgfinder_test.go @@ -0,0 +1,40 @@ +// -*- Mode: Go; indent-tabs-mode: t -*- + +/* + * Copyright (C) 2018 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package advisor_test + +import ( + . "gopkg.in/check.v1" + + "github.com/snapcore/snapd/advisor" +) + +func (s *cmdfinderSuite) TestFindPackageHit(c *C) { + pkg, err := advisor.FindPackage("foo") + c.Assert(err, IsNil) + c.Check(pkg, DeepEquals, &advisor.Package{ + Snap: "foo", Version: "1.0", Summary: "foo summary", + }) +} + +func (s *cmdfinderSuite) TestFindPackageMiss(c *C) { + pkg, err := advisor.FindPackage("moh") + c.Assert(err, IsNil) + c.Check(pkg, IsNil) +} From d826fa9e2f8ec1056778e0da7a23a6d4124c3cf5 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 5 Apr 2018 08:54:31 +0200 Subject: [PATCH 5/6] advisor: use json for package database, refactor/simplify code (use advisor.Package everyhwere) --- advisor/backend.go | 21 +++++++-------------- advisor/cmdfinder_test.go | 6 +++--- advisor/pkgfinder.go | 6 +++--- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/advisor/backend.go b/advisor/backend.go index f2e83173af9..756e1503d3d 100644 --- a/advisor/backend.go +++ b/advisor/backend.go @@ -35,13 +35,6 @@ var ( pkgBucketKey = []byte("Snaps") ) -// snapInfo contains information about what snap provides a command -type snapInfo struct { - Name string `json:"name"` - Version string `json:"version"` - Summary string `json:"summary,omitempty"` -} - type writer struct { db *bolt.DB tx *bolt.Tx @@ -107,7 +100,7 @@ func Create() (CommandDB, error) { func (t *writer) AddSnap(snapName, version, summary string, commands []string) error { for _, cmd := range commands { - var sil []snapInfo + var sil []Package bcmd := []byte(cmd) row := t.cmdBucket.Get(bcmd) @@ -116,7 +109,7 @@ func (t *writer) AddSnap(snapName, version, summary string, commands []string) e return err } } - sil = append(sil, snapInfo{Name: snapName, Version: version}) + sil = append(sil, Package{Snap: snapName, Version: version}) row, err := json.Marshal(sil) if err != nil { return err @@ -127,8 +120,8 @@ func (t *writer) AddSnap(snapName, version, summary string, commands []string) e } // TODO: use json here as well and put the version information here - bj, err := json.Marshal(snapInfo{ - Name: snapName, + bj, err := json.Marshal(Package{ + Snap: snapName, Version: version, Summary: summary, }) @@ -245,14 +238,14 @@ func (f *boltFinder) FindCommand(command string) ([]Command, error) { if buf == nil { return nil, nil } - var sil []snapInfo + var sil []Package if err := json.Unmarshal(buf, &sil); err != nil { return nil, err } cmds := make([]Command, len(sil)) for i, si := range sil { cmds[i] = Command{ - Snap: si.Name, + Snap: si.Snap, Version: si.Version, Command: command, } @@ -277,7 +270,7 @@ func (f *boltFinder) FindPackage(pkgName string) (*Package, error) { if bj == nil { return nil, nil } - var si snapInfo + var si Package err = json.Unmarshal(bj, &si) if err != nil { return nil, err diff --git a/advisor/cmdfinder_test.go b/advisor/cmdfinder_test.go index 1a2cdbe71d3..5a83e5409c4 100644 --- a/advisor/cmdfinder_test.go +++ b/advisor/cmdfinder_test.go @@ -129,9 +129,9 @@ func (s *cmdfinderSuite) TestDumpCommands(c *C) { cmds, err := advisor.DumpCommands() c.Assert(err, IsNil) c.Check(cmds, DeepEquals, map[string]string{ - "foo": `[{"name":"foo","version":"1.0"}]`, - "bar": `[{"name":"bar","version":"2.0"}]`, - "meh": `[{"name":"foo","version":"1.0"},{"name":"bar","version":"2.0"}]`, + "foo": `[{"snap":"foo","version":"1.0"}]`, + "bar": `[{"snap":"bar","version":"2.0"}]`, + "meh": `[{"snap":"foo","version":"1.0"},{"snap":"bar","version":"2.0"}]`, }) } diff --git a/advisor/pkgfinder.go b/advisor/pkgfinder.go index db76691ea1f..bae4f820e57 100644 --- a/advisor/pkgfinder.go +++ b/advisor/pkgfinder.go @@ -24,9 +24,9 @@ import ( ) type Package struct { - Snap string - Version string - Summary string + Snap string `json:"snap"` + Version string `json:"version"` + Summary string `json:"summary,omitempty"` } func FindPackage(pkgName string) (*Package, error) { From 3e723687b56d8e471c5e587f10f4e06a9c33dfd7 Mon Sep 17 00:00:00 2001 From: "John R. Lenton" Date: Fri, 6 Apr 2018 15:07:05 +0100 Subject: [PATCH 6/6] advisor, overlord/snapstate: address review feedback (thanks @zyga, @bboozzoo) --- advisor/backend.go | 1 + overlord/snapstate/catalogrefresh_test.go | 6 +++--- store/store_test.go | 10 +++++----- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/advisor/backend.go b/advisor/backend.go index 756e1503d3d..917bc99ea0b 100644 --- a/advisor/backend.go +++ b/advisor/backend.go @@ -109,6 +109,7 @@ func (t *writer) AddSnap(snapName, version, summary string, commands []string) e return err } } + // For the mapping of command->snap we do not need the summary, nothing is using that. sil = append(sil, Package{Snap: snapName, Version: version}) row, err := json.Marshal(sil) if err != nil { diff --git a/overlord/snapstate/catalogrefresh_test.go b/overlord/snapstate/catalogrefresh_test.go index 73c74d3b5f3..7180f823f6b 100644 --- a/overlord/snapstate/catalogrefresh_test.go +++ b/overlord/snapstate/catalogrefresh_test.go @@ -106,9 +106,9 @@ func (s *catalogRefreshTestSuite) TestCatalogRefresh(c *C) { dump, err := advisor.DumpCommands() c.Assert(err, IsNil) c.Check(dump, DeepEquals, map[string]string{ - "foo": `[{"name":"foo","version":"1.0"}]`, - "bar": `[{"name":"bar","version":"2.0"}]`, - "meh": `[{"name":"foo","version":"1.0"},{"name":"bar","version":"2.0"}]`, + "foo": `[{"snap":"foo","version":"1.0"}]`, + "bar": `[{"snap":"bar","version":"2.0"}]`, + "meh": `[{"snap":"foo","version":"1.0"},{"snap":"bar","version":"2.0"}]`, }) } diff --git a/store/store_test.go b/store/store_test.go index e8e92f62526..39e32fc3f83 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -2923,11 +2923,11 @@ func (s *storeTestSuite) testSnapCommands(c *C, onClassic bool) { dump, err := advisor.DumpCommands() c.Assert(err, IsNil) - c.Check(dump, DeepEquals, map[string][]string{ - "foo": {"foo/1.0"}, - "bar.baz": {"bar/2.0"}, - "potato": {"bar/2.0"}, - "meh": {"bar/2.0", "foo/1.0"}, + c.Check(dump, DeepEquals, map[string]string{ + "foo": `[{"snap":"foo","version":"1.0"}]`, + "bar.baz": `[{"snap":"bar","version":"2.0"}]`, + "potato": `[{"snap":"bar","version":"2.0"}]`, + "meh": `[{"snap":"bar","version":"2.0"},{"snap":"foo","version":"1.0"}]`, }) }