github.com/kubiko/snapd@v0.0.0-20201013125620-d4f3094d9ddf/cmd/snap/cmd_create_user_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 main_test 21 22 import ( 23 "encoding/json" 24 "fmt" 25 "net/http" 26 27 "gopkg.in/check.v1" 28 29 "github.com/snapcore/snapd/client" 30 snap "github.com/snapcore/snapd/cmd/snap" 31 ) 32 33 func makeCreateUserChecker(c *check.C, n *int, email string, sudoer, known bool) func(w http.ResponseWriter, r *http.Request) { 34 f := func(w http.ResponseWriter, r *http.Request) { 35 switch *n { 36 case 0: 37 c.Check(r.Method, check.Equals, "POST") 38 c.Check(r.URL.Path, check.Equals, "/v2/users") 39 var gotBody map[string]interface{} 40 dec := json.NewDecoder(r.Body) 41 err := dec.Decode(&gotBody) 42 c.Assert(err, check.IsNil) 43 44 wantBody := map[string]interface{}{ 45 "action": "create", 46 } 47 if email != "" { 48 wantBody["email"] = "one@email.com" 49 } 50 if sudoer { 51 wantBody["sudoer"] = true 52 } 53 if known { 54 wantBody["known"] = true 55 } 56 c.Check(gotBody, check.DeepEquals, wantBody) 57 58 if email == "" { 59 fmt.Fprintln(w, `{"type": "sync", "result": [{"username": "karl", "ssh-keys": ["a","b"]}]}`) 60 } else { 61 fmt.Fprintln(w, `{"type": "sync", "result": [{"username": "karl", "ssh-keys": ["a","b"]}]}`) 62 } 63 default: 64 c.Fatalf("got too many requests (now on %d)", *n+1) 65 } 66 67 *n++ 68 } 69 return f 70 } 71 72 func (s *SnapSuite) TestCreateUserNoSudoer(c *check.C) { 73 n := 0 74 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", false, false)) 75 76 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "one@email.com"}) 77 c.Assert(err, check.IsNil) 78 c.Check(rest, check.DeepEquals, []string{}) 79 c.Check(n, check.Equals, 1) 80 c.Assert(s.Stdout(), check.Equals, `created user "karl"`+"\n") 81 c.Assert(s.Stderr(), check.Equals, "") 82 } 83 84 func (s *SnapSuite) TestCreateUserSudoer(c *check.C) { 85 n := 0 86 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", true, false)) 87 88 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--sudoer", "one@email.com"}) 89 c.Assert(err, check.IsNil) 90 c.Check(rest, check.DeepEquals, []string{}) 91 c.Check(n, check.Equals, 1) 92 c.Assert(s.Stdout(), check.Equals, `created user "karl"`+"\n") 93 c.Assert(s.Stderr(), check.Equals, "") 94 } 95 96 func (s *SnapSuite) TestCreateUserJSON(c *check.C) { 97 n := 0 98 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", false, false)) 99 100 expectedResponse := &client.CreateUserResult{ 101 Username: "karl", 102 SSHKeys: []string{"a", "b"}, 103 } 104 actualResponse := &client.CreateUserResult{} 105 106 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--json", "one@email.com"}) 107 c.Assert(err, check.IsNil) 108 c.Check(rest, check.DeepEquals, []string{}) 109 c.Check(n, check.Equals, 1) 110 json.Unmarshal(s.stdout.Bytes(), actualResponse) 111 c.Assert(actualResponse, check.DeepEquals, expectedResponse) 112 c.Assert(s.Stderr(), check.Equals, "") 113 } 114 115 func (s *SnapSuite) TestCreateUserNoEmailJSON(c *check.C) { 116 n := 0 117 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "", false, true)) 118 119 var expectedResponse = []*client.CreateUserResult{{ 120 Username: "karl", 121 SSHKeys: []string{"a", "b"}, 122 }} 123 var actualResponse []*client.CreateUserResult 124 125 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--json", "--known"}) 126 c.Assert(err, check.IsNil) 127 c.Check(rest, check.DeepEquals, []string{}) 128 c.Check(n, check.Equals, 1) 129 json.Unmarshal(s.stdout.Bytes(), &actualResponse) 130 c.Assert(actualResponse, check.DeepEquals, expectedResponse) 131 c.Assert(s.Stderr(), check.Equals, "") 132 } 133 134 func (s *SnapSuite) TestCreateUserKnown(c *check.C) { 135 n := 0 136 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", false, true)) 137 138 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--known", "one@email.com"}) 139 c.Assert(err, check.IsNil) 140 c.Check(rest, check.DeepEquals, []string{}) 141 c.Check(n, check.Equals, 1) 142 } 143 144 func (s *SnapSuite) TestCreateUserKnownNoEmail(c *check.C) { 145 n := 0 146 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "", false, true)) 147 148 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--known"}) 149 c.Assert(err, check.IsNil) 150 c.Check(rest, check.DeepEquals, []string{}) 151 c.Check(n, check.Equals, 1) 152 }