func (s *SnapSuite) TestInstallPathDevMode(c *check.C) { n := 0 snapBody := []byte("snap-data") s.RedirectClientToTestServer(func(w http.ResponseWriter, r *http.Request) { switch n { case 0: c.Check(r.Method, check.Equals, "POST") c.Check(r.URL.Path, check.Equals, "/v2/snaps") postData, err := ioutil.ReadAll(r.Body) c.Assert(err, check.IsNil) c.Assert(string(postData), check.Matches, "(?s).*\r\nsnap-data\r\n.*") c.Assert(string(postData), check.Matches, "(?s).*Content-Disposition: form-data; name=\"action\"\r\n\r\ninstall\r\n.*") c.Assert(string(postData), check.Matches, "(?s).*Content-Disposition: form-data; name=\"devmode\"\r\n\r\ntrue\r\n.*") w.WriteHeader(http.StatusAccepted) fmt.Fprintln(w, `{"type":"async", "change": "42", "status-code": 202}`) case 1: c.Check(r.Method, check.Equals, "GET") c.Check(r.URL.Path, check.Equals, "/v2/changes/42") fmt.Fprintln(w, `{"type": "sync", "result": {"status": "Doing"}}`) case 2: c.Check(r.Method, check.Equals, "GET") c.Check(r.URL.Path, check.Equals, "/v2/changes/42") fmt.Fprintln(w, `{"type": "sync", "result": {"ready": true, "status": "Done"}}`) default: c.Fatalf("expected to get 3 requests, now on %d", n) } n++ }) snapPath := filepath.Join(c.MkDir(), "foo.snap") err := ioutil.WriteFile(snapPath, snapBody, 0644) c.Assert(err, check.IsNil) rest, err := snap.Parser().ParseArgs([]string{"install", "--devmode", snapPath}) c.Assert(err, check.IsNil) c.Assert(rest, check.DeepEquals, []string{}) c.Check(s.Stdout(), check.Equals, "") c.Check(s.Stderr(), check.Equals, "") // ensure that the fake server api was actually hit c.Check(n, check.Equals, 3) }
func (s *SnapSuite) TestInstallDevMode(c *check.C) { n := 0 s.RedirectClientToTestServer(func(w http.ResponseWriter, r *http.Request) { switch n { case 0: c.Check(r.Method, check.Equals, "POST") c.Check(r.URL.Path, check.Equals, "/v2/snaps/foo.bar") c.Check(DecodedRequestBody(c, r), check.DeepEquals, map[string]interface{}{ "action": "install", "name": "foo.bar", "devmode": true, "channel": "chan", }) w.WriteHeader(http.StatusAccepted) fmt.Fprintln(w, `{"type":"async", "change": "42", "status-code": 202}`) case 1: c.Check(r.Method, check.Equals, "GET") c.Check(r.URL.Path, check.Equals, "/v2/changes/42") fmt.Fprintln(w, `{"type": "sync", "result": {"status": "Doing"}}`) case 2: c.Check(r.Method, check.Equals, "GET") c.Check(r.URL.Path, check.Equals, "/v2/changes/42") fmt.Fprintln(w, `{"type": "sync", "result": {"ready": true, "status": "Done"}}`) default: c.Fatalf("expected to get 3 requests, now on %d", n) } n++ }) rest, err := snap.Parser().ParseArgs([]string{"install", "--channel", "chan", "--devmode", "foo.bar"}) c.Assert(err, check.IsNil) c.Assert(rest, check.DeepEquals, []string{}) c.Check(s.Stdout(), check.Equals, "") c.Check(s.Stderr(), check.Equals, "") // ensure that the fake server api was actually hit c.Check(n, check.Equals, 3) }