github.com/rigado/snapd@v2.42.5-go-mod+incompatible/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/create-user") 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 := make(map[string]interface{}) 45 if email != "" { 46 wantBody["email"] = "one@email.com" 47 } 48 if sudoer { 49 wantBody["sudoer"] = true 50 } 51 if known { 52 wantBody["known"] = true 53 } 54 c.Check(gotBody, check.DeepEquals, wantBody) 55 56 if email == "" { 57 fmt.Fprintln(w, `{"type": "sync", "result": [{"username": "karl", "ssh-keys": ["a","b"]}]}`) 58 } else { 59 fmt.Fprintln(w, `{"type": "sync", "result": {"username": "karl", "ssh-keys": ["a","b"]}}`) 60 } 61 default: 62 c.Fatalf("got too many requests (now on %d)", *n+1) 63 } 64 65 *n++ 66 } 67 return f 68 } 69 70 func (s *SnapSuite) TestCreateUserNoSudoer(c *check.C) { 71 n := 0 72 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", false, false)) 73 74 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "one@email.com"}) 75 c.Assert(err, check.IsNil) 76 c.Check(rest, check.DeepEquals, []string{}) 77 c.Check(n, check.Equals, 1) 78 c.Assert(s.Stdout(), check.Equals, `created user "karl"`+"\n") 79 c.Assert(s.Stderr(), check.Equals, "") 80 } 81 82 func (s *SnapSuite) TestCreateUserSudoer(c *check.C) { 83 n := 0 84 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", true, false)) 85 86 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--sudoer", "one@email.com"}) 87 c.Assert(err, check.IsNil) 88 c.Check(rest, check.DeepEquals, []string{}) 89 c.Check(n, check.Equals, 1) 90 c.Assert(s.Stdout(), check.Equals, `created user "karl"`+"\n") 91 c.Assert(s.Stderr(), check.Equals, "") 92 } 93 94 func (s *SnapSuite) TestCreateUserJSON(c *check.C) { 95 n := 0 96 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", false, false)) 97 98 expectedResponse := &client.CreateUserResult{ 99 Username: "karl", 100 SSHKeys: []string{"a", "b"}, 101 } 102 actualResponse := &client.CreateUserResult{} 103 104 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--json", "one@email.com"}) 105 c.Assert(err, check.IsNil) 106 c.Check(rest, check.DeepEquals, []string{}) 107 c.Check(n, check.Equals, 1) 108 json.Unmarshal(s.stdout.Bytes(), actualResponse) 109 c.Assert(actualResponse, check.DeepEquals, expectedResponse) 110 c.Assert(s.Stderr(), check.Equals, "") 111 } 112 113 func (s *SnapSuite) TestCreateUserNoEmailJSON(c *check.C) { 114 n := 0 115 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "", false, true)) 116 117 var expectedResponse = []*client.CreateUserResult{{ 118 Username: "karl", 119 SSHKeys: []string{"a", "b"}, 120 }} 121 var actualResponse []*client.CreateUserResult 122 123 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--json", "--known"}) 124 c.Assert(err, check.IsNil) 125 c.Check(rest, check.DeepEquals, []string{}) 126 c.Check(n, check.Equals, 1) 127 json.Unmarshal(s.stdout.Bytes(), &actualResponse) 128 c.Assert(actualResponse, check.DeepEquals, expectedResponse) 129 c.Assert(s.Stderr(), check.Equals, "") 130 } 131 132 func (s *SnapSuite) TestCreateUserKnown(c *check.C) { 133 n := 0 134 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "one@email.com", false, true)) 135 136 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--known", "one@email.com"}) 137 c.Assert(err, check.IsNil) 138 c.Check(rest, check.DeepEquals, []string{}) 139 c.Check(n, check.Equals, 1) 140 } 141 142 func (s *SnapSuite) TestCreateUserKnownNoEmail(c *check.C) { 143 n := 0 144 s.RedirectClientToTestServer(makeCreateUserChecker(c, &n, "", false, true)) 145 146 rest, err := snap.Parser(snap.Client()).ParseArgs([]string{"create-user", "--known"}) 147 c.Assert(err, check.IsNil) 148 c.Check(rest, check.DeepEquals, []string{}) 149 c.Check(n, check.Equals, 1) 150 }