// Open opens a given snap file with the right backend func Open(path string) (Container, error) { // see if it's a snapdir first if osutil.FileExists(filepath.Join(path, "meta", "snap.yaml")) { return snapdir.New(path), nil } // open the file and check magic f, err := os.Open(path) if err != nil { return nil, fmt.Errorf("cannot open snap: %v", err) } defer f.Close() header := make([]byte, 20) if _, err := f.ReadAt(header, 0); err != nil { return nil, fmt.Errorf("cannot read snap: %v", err) } for _, h := range formatHandlers { if bytes.HasPrefix(header, h.magic) { return h.open(path) } } return nil, fmt.Errorf("cannot open snap: unknown header: %q", header) }
func (s *SnapdirTestSuite) TestReadFile(c *C) { d := c.MkDir() needle := []byte(`stuff`) err := ioutil.WriteFile(filepath.Join(d, "foo"), needle, 0644) c.Assert(err, IsNil) snap := snapdir.New(d) content, err := snap.ReadFile("foo") c.Assert(err, IsNil) c.Assert(content, DeepEquals, needle) }
func (s *SnapdirTestSuite) TestInstall(c *C) { tryBaseDir := c.MkDir() snap := snapdir.New(tryBaseDir) varLibSnapd := c.MkDir() targetPath := filepath.Join(varLibSnapd, "foo_1.0.snap") err := snap.Install(targetPath, "unused-mount-dir") c.Assert(err, IsNil) symlinkTarget, err := filepath.EvalSymlinks(targetPath) c.Assert(err, IsNil) c.Assert(symlinkTarget, Equals, tryBaseDir) }
func (s *SnapdirTestSuite) TestListDir(c *C) { d := c.MkDir() err := os.MkdirAll(filepath.Join(d, "test"), 0755) c.Assert(err, IsNil) err = ioutil.WriteFile(filepath.Join(d, "test", "test1"), nil, 0644) c.Assert(err, IsNil) err = ioutil.WriteFile(filepath.Join(d, "test", "test2"), nil, 0644) c.Assert(err, IsNil) snap := snapdir.New(d) fileNames, err := snap.ListDir("test") c.Assert(err, IsNil) c.Assert(fileNames, HasLen, 2) c.Check(fileNames[0], Equals, "test1") c.Check(fileNames[1], Equals, "test2") }