func loadState(backend state.Backend) (*state.State, error) { if !osutil.FileExists(dirs.SnapStateFile) { // fail fast, mostly interesting for tests, this dir is setup // by the snapd package stateDir := filepath.Dir(dirs.SnapStateFile) if !osutil.IsDirectory(stateDir) { return nil, fmt.Errorf("fatal: directory %q must be present", stateDir) } s := state.New(backend) patch.Init(s) return s, nil } r, err := os.Open(dirs.SnapStateFile) if err != nil { return nil, fmt.Errorf("cannot read the state file: %s", err) } defer r.Close() s, err := state.ReadState(backend, r) if err != nil { return nil, err } // one-shot migrations err = patch.Apply(s) if err != nil { return nil, err } return s, nil }
func (s *patchSuite) TestInit(c *C) { restore := patch.Mock(2, nil) defer restore() st := state.New(nil) patch.Init(st) st.Lock() defer st.Unlock() var patchLevel int err := st.Get("patch-level", &patchLevel) c.Assert(err, IsNil) c.Check(patchLevel, Equals, 2) }