func (s *SnapSuite) TestAutoImportIntoSpoolUnhappyTooBig(c *C) { restore := release.MockOnClassic(false) defer restore() dirs.SetRootDir(c.MkDir()) defer dirs.SetRootDir("") l, err := logger.NewConsoleLog(s.stderr, 0) c.Assert(err, IsNil) logger.SetLogger(l) // fake data is bigger than the default assertion limit fakeAssertData := make([]byte, 641*1024) // ensure we can not connect snap.ClientConfig.BaseURL = "can-not-connect-to-this-url" fakeAssertsFn := filepath.Join(c.MkDir(), "auto-import.assert") err = ioutil.WriteFile(fakeAssertsFn, fakeAssertData, 0644) c.Assert(err, IsNil) mockMountInfoFmt := ` 24 0 8:18 / %s rw,relatime shared:1 - squashfs /dev/sc1 rw,errors=remount-ro,data=ordered` content := fmt.Sprintf(mockMountInfoFmt, filepath.Dir(fakeAssertsFn)) restore = snap.MockMountInfoPath(makeMockMountInfo(c, content)) defer restore() _, err = snap.Parser().ParseArgs([]string{"auto-import"}) c.Assert(err, ErrorMatches, "cannot queue .*, file size too big: 656384") }
func (s *loggerSuite) SetUpTest(c *check.C) { os.Setenv("SNAPD_DEBUG", "true") s.logbuf = bytes.NewBuffer(nil) l, err := logger.NewConsoleLog(s.logbuf, logger.DefaultFlags) c.Assert(err, check.IsNil) logger.SetLogger(l) }
func (s *SnapSuite) TestAutoImportFromSpoolHappy(c *C) { restore := release.MockOnClassic(false) defer restore() fakeAssertData := []byte("my-assertion") n := 0 total := 2 s.RedirectClientToTestServer(func(w http.ResponseWriter, r *http.Request) { switch n { case 0: c.Check(r.Method, Equals, "POST") c.Check(r.URL.Path, Equals, "/v2/assertions") postData, err := ioutil.ReadAll(r.Body) c.Assert(err, IsNil) c.Check(postData, DeepEquals, fakeAssertData) fmt.Fprintln(w, `{"type": "sync", "result": {"ready": true, "status": "Done"}}`) n++ case 1: c.Check(r.Method, Equals, "POST") c.Check(r.URL.Path, Equals, "/v2/create-user") postData, err := ioutil.ReadAll(r.Body) c.Assert(err, IsNil) c.Check(string(postData), Equals, `{"sudoer":true,"known":true}`) fmt.Fprintln(w, `{"type": "sync", "result": [{"username": "******"}]}`) n++ default: c.Fatalf("unexpected request: %v (expected %d got %d)", r, total, n) } }) dirs.SetRootDir(c.MkDir()) defer dirs.SetRootDir("") fakeAssertsFn := filepath.Join(dirs.SnapAssertsSpoolDir, "1234343") err := os.MkdirAll(filepath.Dir(fakeAssertsFn), 0755) c.Assert(err, IsNil) err = ioutil.WriteFile(fakeAssertsFn, fakeAssertData, 0644) c.Assert(err, IsNil) l, err := logger.NewConsoleLog(s.stderr, 0) c.Assert(err, IsNil) logger.SetLogger(l) rest, err := snap.Parser().ParseArgs([]string{"auto-import"}) c.Assert(err, IsNil) c.Assert(rest, DeepEquals, []string{}) c.Check(s.Stdout(), Equals, `created user "foo"`+"\n") // matches because we may get a: // "WARNING: cannot create syslog logger\n" // in the output c.Check(s.Stderr(), Matches, fmt.Sprintf("(?ms).*imported %s\n", fakeAssertsFn)) c.Check(n, Equals, total) c.Check(osutil.FileExists(fakeAssertsFn), Equals, false) }
func (s *SnapSuite) TestAutoImportAssertsHappy(c *C) { restore := release.MockOnClassic(false) defer restore() fakeAssertData := []byte("my-assertion") n := 0 total := 2 s.RedirectClientToTestServer(func(w http.ResponseWriter, r *http.Request) { switch n { case 0: c.Check(r.Method, Equals, "POST") c.Check(r.URL.Path, Equals, "/v2/assertions") postData, err := ioutil.ReadAll(r.Body) c.Assert(err, IsNil) c.Check(postData, DeepEquals, fakeAssertData) fmt.Fprintln(w, `{"type": "sync", "result": {"ready": true, "status": "Done"}}`) n++ case 1: c.Check(r.Method, Equals, "POST") c.Check(r.URL.Path, Equals, "/v2/create-user") postData, err := ioutil.ReadAll(r.Body) c.Assert(err, IsNil) c.Check(string(postData), Equals, `{"sudoer":true,"known":true}`) fmt.Fprintln(w, `{"type": "sync", "result": [{"username": "******"}]}`) n++ default: c.Fatalf("unexpected request: %v (expected %d got %d)", r, total, n) } }) fakeAssertsFn := filepath.Join(c.MkDir(), "auto-import.assert") err := ioutil.WriteFile(fakeAssertsFn, fakeAssertData, 0644) c.Assert(err, IsNil) mockMountInfoFmt := ` 24 0 8:18 / %s rw,relatime shared:1 - ext4 /dev/sdb2 rw,errors=remount-ro,data=ordered` content := fmt.Sprintf(mockMountInfoFmt, filepath.Dir(fakeAssertsFn)) restore = snap.MockMountInfoPath(makeMockMountInfo(c, content)) defer restore() l, err := logger.NewConsoleLog(s.stderr, 0) c.Assert(err, IsNil) logger.SetLogger(l) rest, err := snap.Parser().ParseArgs([]string{"auto-import"}) c.Assert(err, IsNil) c.Assert(rest, DeepEquals, []string{}) c.Check(s.Stdout(), Equals, `created user "foo"`+"\n") // matches because we may get a: // "WARNING: cannot create syslog logger\n" // in the output c.Check(s.Stderr(), Matches, fmt.Sprintf("(?ms).*imported %s\n", fakeAssertsFn)) c.Check(n, Equals, total) }
func (s *SnapSuite) TestAutoImportIntoSpool(c *C) { restore := release.MockOnClassic(false) defer restore() dirs.SetRootDir(c.MkDir()) defer dirs.SetRootDir("") l, err := logger.NewConsoleLog(s.stderr, 0) c.Assert(err, IsNil) logger.SetLogger(l) fakeAssertData := []byte("good-assertion") // ensure we can not connect snap.ClientConfig.BaseURL = "can-not-connect-to-this-url" fakeAssertsFn := filepath.Join(c.MkDir(), "auto-import.assert") err = ioutil.WriteFile(fakeAssertsFn, fakeAssertData, 0644) c.Assert(err, IsNil) mockMountInfoFmt := ` 24 0 8:18 / %s rw,relatime shared:1 - squashfs /dev/sc1 rw,errors=remount-ro,data=ordered` content := fmt.Sprintf(mockMountInfoFmt, filepath.Dir(fakeAssertsFn)) restore = snap.MockMountInfoPath(makeMockMountInfo(c, content)) defer restore() rest, err := snap.Parser().ParseArgs([]string{"auto-import"}) c.Assert(err, IsNil) c.Assert(rest, DeepEquals, []string{}) c.Check(s.Stdout(), Equals, "") // matches because we may get a: // "WARNING: cannot create syslog logger\n" // in the output c.Check(s.Stderr(), Matches, "(?ms).*queuing for later.*\n") files, err := ioutil.ReadDir(dirs.SnapAssertsSpoolDir) c.Assert(err, IsNil) c.Check(files, HasLen, 1) c.Check(files[0].Name(), Equals, "iOkaeet50rajLvL-0Qsf2ELrTdn3XIXRIBlDewcK02zwRi3_TJlUOTl9AaiDXmDn.assert") }