github.com/meulengracht/snapd@v0.0.0-20210719210640-8bde69bcc84e/client/aliases_test.go (about)

     1  // -*- Mode: Go; indent-tabs-mode: t -*-
     2  
     3  /*
     4   * Copyright (C) 2016 Canonical Ltd
     5   *
     6   * This program is free software: you can redistribute it and/or modify
     7   * it under the terms of the GNU General Public License version 3 as
     8   * published by the Free Software Foundation.
     9   *
    10   * This program is distributed in the hope that it will be useful,
    11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13   * GNU General Public License for more details.
    14   *
    15   * You should have received a copy of the GNU General Public License
    16   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17   *
    18   */
    19  
    20  package client_test
    21  
    22  import (
    23  	"encoding/json"
    24  
    25  	"gopkg.in/check.v1"
    26  
    27  	"github.com/snapcore/snapd/client"
    28  )
    29  
    30  func (cs *clientSuite) TestClientAliasCallsEndpoint(c *check.C) {
    31  	cs.cli.Alias("alias-snap", "cmd1", "alias1")
    32  	c.Check(cs.req.Method, check.Equals, "POST")
    33  	c.Check(cs.req.URL.Path, check.Equals, "/v2/aliases")
    34  }
    35  
    36  func (cs *clientSuite) TestClientAlias(c *check.C) {
    37  	cs.status = 202
    38  	cs.rsp = `{
    39  		"type": "async",
    40                  "status-code": 202,
    41  		"result": { },
    42                  "change": "chgid"
    43  	}`
    44  	id, err := cs.cli.Alias("alias-snap", "cmd1", "alias1")
    45  	c.Assert(err, check.IsNil)
    46  	c.Check(id, check.Equals, "chgid")
    47  	var body map[string]interface{}
    48  	decoder := json.NewDecoder(cs.req.Body)
    49  	err = decoder.Decode(&body)
    50  	c.Check(err, check.IsNil)
    51  	c.Check(body, check.DeepEquals, map[string]interface{}{
    52  		"action": "alias",
    53  		"snap":   "alias-snap",
    54  		"app":    "cmd1",
    55  		"alias":  "alias1",
    56  	})
    57  }
    58  
    59  func (cs *clientSuite) TestClientUnaliasCallsEndpoint(c *check.C) {
    60  	cs.cli.Unalias("alias1")
    61  	c.Check(cs.req.Method, check.Equals, "POST")
    62  	c.Check(cs.req.URL.Path, check.Equals, "/v2/aliases")
    63  }
    64  
    65  func (cs *clientSuite) TestClientUnalias(c *check.C) {
    66  	cs.status = 202
    67  	cs.rsp = `{
    68  		"type": "async",
    69                  "status-code": 202,
    70  		"result": { },
    71                  "change": "chgid"
    72  	}`
    73  	id, err := cs.cli.Unalias("alias1")
    74  	c.Assert(err, check.IsNil)
    75  	c.Check(id, check.Equals, "chgid")
    76  	var body map[string]interface{}
    77  	decoder := json.NewDecoder(cs.req.Body)
    78  	err = decoder.Decode(&body)
    79  	c.Check(err, check.IsNil)
    80  	c.Check(body, check.DeepEquals, map[string]interface{}{
    81  		"action": "unalias",
    82  		"snap":   "alias1",
    83  		"alias":  "alias1",
    84  	})
    85  }
    86  
    87  func (cs *clientSuite) TestClientDisableAllAliasesCallsEndpoint(c *check.C) {
    88  	cs.cli.DisableAllAliases("some-snap")
    89  	c.Check(cs.req.Method, check.Equals, "POST")
    90  	c.Check(cs.req.URL.Path, check.Equals, "/v2/aliases")
    91  }
    92  
    93  func (cs *clientSuite) TestClientDisableAllAliases(c *check.C) {
    94  	cs.status = 202
    95  	cs.rsp = `{
    96  		"type": "async",
    97                  "status-code": 202,
    98  		"result": { },
    99                  "change": "chgid"
   100  	}`
   101  	id, err := cs.cli.DisableAllAliases("some-snap")
   102  	c.Assert(err, check.IsNil)
   103  	c.Check(id, check.Equals, "chgid")
   104  	var body map[string]interface{}
   105  	decoder := json.NewDecoder(cs.req.Body)
   106  	err = decoder.Decode(&body)
   107  	c.Check(err, check.IsNil)
   108  	c.Check(body, check.DeepEquals, map[string]interface{}{
   109  		"action": "unalias",
   110  		"snap":   "some-snap",
   111  	})
   112  }
   113  
   114  func (cs *clientSuite) TestClientRemoveManualAliasCallsEndpoint(c *check.C) {
   115  	cs.cli.RemoveManualAlias("alias1")
   116  	c.Check(cs.req.Method, check.Equals, "POST")
   117  	c.Check(cs.req.URL.Path, check.Equals, "/v2/aliases")
   118  }
   119  
   120  func (cs *clientSuite) TestClientRemoveManualAlias(c *check.C) {
   121  	cs.status = 202
   122  	cs.rsp = `{
   123  		"type": "async",
   124                  "status-code": 202,
   125  		"result": { },
   126                  "change": "chgid"
   127  	}`
   128  	id, err := cs.cli.RemoveManualAlias("alias1")
   129  	c.Assert(err, check.IsNil)
   130  	c.Check(id, check.Equals, "chgid")
   131  	var body map[string]interface{}
   132  	decoder := json.NewDecoder(cs.req.Body)
   133  	err = decoder.Decode(&body)
   134  	c.Check(err, check.IsNil)
   135  	c.Check(body, check.DeepEquals, map[string]interface{}{
   136  		"action": "unalias",
   137  		"alias":  "alias1",
   138  	})
   139  }
   140  
   141  func (cs *clientSuite) TestClientPreferCallsEndpoint(c *check.C) {
   142  	cs.cli.Prefer("some-snap")
   143  	c.Check(cs.req.Method, check.Equals, "POST")
   144  	c.Check(cs.req.URL.Path, check.Equals, "/v2/aliases")
   145  }
   146  
   147  func (cs *clientSuite) TestClientPrefer(c *check.C) {
   148  	cs.status = 202
   149  	cs.rsp = `{
   150  		"type": "async",
   151                  "status-code": 202,
   152  		"result": { },
   153                  "change": "chgid"
   154  	}`
   155  	id, err := cs.cli.Prefer("some-snap")
   156  	c.Assert(err, check.IsNil)
   157  	c.Check(id, check.Equals, "chgid")
   158  	var body map[string]interface{}
   159  	decoder := json.NewDecoder(cs.req.Body)
   160  	err = decoder.Decode(&body)
   161  	c.Check(err, check.IsNil)
   162  	c.Check(body, check.DeepEquals, map[string]interface{}{
   163  		"action": "prefer",
   164  		"snap":   "some-snap",
   165  	})
   166  }
   167  
   168  func (cs *clientSuite) TestClientAliasesCallsEndpoint(c *check.C) {
   169  	_, _ = cs.cli.Aliases()
   170  	c.Check(cs.req.Method, check.Equals, "GET")
   171  	c.Check(cs.req.URL.Path, check.Equals, "/v2/aliases")
   172  }
   173  
   174  func (cs *clientSuite) TestClientAliases(c *check.C) {
   175  	cs.rsp = `{
   176  		"type": "sync",
   177  		"result": {
   178                      "foo": {
   179                          "foo0": {"command": "foo", "status": "auto", "auto": "foo"},
   180                          "foo_reset": {"command": "foo.reset", "manual": "reset", "status": "manual"}
   181                      },
   182                      "bar": {
   183                          "bar_dump": {"command": "bar.dump", "status": "manual", "manual": "dump"},
   184                          "bar_dump.1": {"command": "bar.dump", "status": "disabled", "auto": "dump"}
   185                      }
   186  		}
   187  	}`
   188  	allStatuses, err := cs.cli.Aliases()
   189  	c.Assert(err, check.IsNil)
   190  	c.Check(allStatuses, check.DeepEquals, map[string]map[string]client.AliasStatus{
   191  		"foo": {
   192  			"foo0":      {Command: "foo", Status: "auto", Auto: "foo"},
   193  			"foo_reset": {Command: "foo.reset", Status: "manual", Manual: "reset"},
   194  		},
   195  		"bar": {
   196  			"bar_dump":   {Command: "bar.dump", Status: "manual", Manual: "dump"},
   197  			"bar_dump.1": {Command: "bar.dump", Status: "disabled", Auto: "dump"},
   198  		},
   199  	})
   200  }