func (s *deviceMgrSuite) TestDeviceManagerEnsureSeedYamlSkippedOnClassic(c *C) { release.OnClassic = true called := false restore := devicestate.MockPopulateStateFromSeed(func(*state.State) ([]*state.TaskSet, error) { called = true return nil, nil }) defer restore() err := s.mgr.EnsureSeedYaml() c.Assert(err, IsNil) c.Assert(called, Equals, false) }
func (s *deviceMgrSuite) TestDeviceManagerEnsureSeedYamlHappy(c *C) { release.OnClassic = false restore := devicestate.MockPopulateStateFromSeed(func(*state.State) (ts []*state.TaskSet, err error) { t := s.state.NewTask("test-task", "a random task") ts = append(ts, state.NewTaskSet(t)) return ts, nil }) defer restore() err := s.mgr.EnsureSeedYaml() c.Assert(err, IsNil) s.state.Lock() defer s.state.Unlock() c.Check(s.state.Changes(), HasLen, 1) }
func (s *deviceMgrSuite) TestDeviceManagerEnsureSeedYamlAlreadySeeded(c *C) { release.OnClassic = false s.state.Lock() s.state.Set("seeded", true) s.state.Unlock() called := false restore := devicestate.MockPopulateStateFromSeed(func(*state.State) ([]*state.TaskSet, error) { called = true return nil, nil }) defer restore() err := s.mgr.EnsureSeedYaml() c.Assert(err, IsNil) c.Assert(called, Equals, false) }
func (s *deviceMgrSuite) TestDeviceManagerEnsureSeedYamlChangeInFlight(c *C) { release.OnClassic = false s.state.Lock() chg := s.state.NewChange("seed", "just for testing") chg.AddTask(s.state.NewTask("test-task", "the change needs a task")) s.state.Unlock() called := false restore := devicestate.MockPopulateStateFromSeed(func(*state.State) ([]*state.TaskSet, error) { called = true return nil, nil }) defer restore() err := s.mgr.EnsureSeedYaml() c.Assert(err, IsNil) c.Assert(called, Equals, false) }
func (s *deviceMgrSuite) TestDeviceManagerEnsureSeedYamlRecover(c *C) { release.OnClassic = false restore := devicestate.MockPopulateStateFromSeed(func(*state.State) (ts []*state.TaskSet, err error) { return nil, errors.New("should not be called") }) defer restore() s.state.Lock() defer s.state.Unlock() s.setupCore(c, "ubuntu-core", ` name: ubuntu-core type: os version: ubuntu-core `, "") // have a model assertion model, err := s.storeSigning.Sign(asserts.ModelType, map[string]interface{}{ "series": "16", "brand-id": "canonical", "model": "pc", "gadget": "pc", "kernel": "kernel", "architecture": "amd64", "timestamp": time.Now().Format(time.RFC3339), }, nil, "") c.Assert(err, IsNil) err = assertstate.Add(s.state, model) c.Assert(err, IsNil) // have a serial assertion devKey, _ := assertstest.GenerateKey(752) encDevKey, err := asserts.EncodePublicKey(devKey.PublicKey()) keyID := devKey.PublicKey().ID() c.Assert(err, IsNil) serial, err := s.storeSigning.Sign(asserts.SerialType, map[string]interface{}{ "brand-id": "canonical", "model": "pc", "serial": "8989", "device-key": string(encDevKey), "device-key-sha3-384": keyID, "timestamp": time.Now().Format(time.RFC3339), }, nil, "") c.Assert(err, IsNil) err = assertstate.Add(s.state, serial) c.Assert(err, IsNil) // forgotten key id and serial auth.SetDevice(s.state, &auth.DeviceState{ Brand: "canonical", Model: "pc", }) // put key on disk err = s.mgr.KeypairManager().Put(devKey) c.Assert(err, IsNil) // extra unused stuff junk1 := filepath.Join(dirs.SnapDeviceDir, "private-keys-v1", "junkjunk1") err = ioutil.WriteFile(junk1, nil, 0644) c.Assert(err, IsNil) junk2 := filepath.Join(dirs.SnapDeviceDir, "private-keys-v1", "junkjunk2") err = ioutil.WriteFile(junk2, nil, 0644) c.Assert(err, IsNil) // double check pat := filepath.Join(dirs.SnapDeviceDir, "private-keys-v1", "*") onDisk, err := filepath.Glob(pat) c.Assert(err, IsNil) c.Check(onDisk, HasLen, 3) s.state.Unlock() err = s.mgr.EnsureSeedYaml() s.state.Lock() c.Assert(err, IsNil) c.Check(s.state.Changes(), HasLen, 0) var seeded bool err = s.state.Get("seeded", &seeded) c.Assert(err, IsNil) c.Check(seeded, Equals, true) device, err := auth.Device(s.state) c.Assert(err, IsNil) c.Check(device, DeepEquals, &auth.DeviceState{ Brand: "canonical", Model: "pc", KeyID: keyID, Serial: "8989", }) // key is still there _, err = s.mgr.KeypairManager().Get(keyID) c.Assert(err, IsNil) onDisk, err = filepath.Glob(pat) c.Assert(err, IsNil) // junk was removed c.Check(onDisk, HasLen, 1) }