diff --git a/state.go b/state.go index 306834efa..4fb76563e 100644 --- a/state.go +++ b/state.go @@ -359,7 +359,9 @@ func (uv *UpdateVerifyState) Handle(ctx *StateContext, c Controller) (State, boo if has { artifactName, err := c.GetCurrentArtifactName() if err != nil { - log.Errorf("Cannot determine current artifact. Update will continue anyways: %v : %v", defaultDeviceTypeFile, err) + log.Errorf("Cannot determine name of new artifact. Update will not continue: %v : %v", defaultDeviceTypeFile, err) + me := NewFatalError(errors.Wrapf(err, "Cannot determine name of new artifact. Update will not continue: %v : %v", defaultDeviceTypeFile, err)) + return NewUpdateErrorState(me, uv.update), false } if uv.update.ArtifactName() == artifactName { log.Infof("successfully running with new image %v", artifactName) diff --git a/state_test.go b/state_test.go index d57b07ba5..e4bd4444b 100644 --- a/state_test.go +++ b/state_test.go @@ -56,7 +56,10 @@ func (s *stateTestController) Bootstrap() menderError { } func (s *stateTestController) GetCurrentArtifactName() (string, error) { - return s.artifactName, nil // TODO return an error? + if s.artifactName == "" { + return "", errors.New("open ..., no such file or directory") + } + return s.artifactName, nil } func (s *stateTestController) GetUpdatePollInterval() time.Duration { @@ -577,6 +580,13 @@ func TestUpdateVerifyState(t *testing.T) { assert.IsType(t, &RebootState{}, s) assert.False(t, c) + // Test upgrade available and no artifact-file found + s, c = uvs.Handle(nil, &stateTestController{ + hasUpgrade: true, + }) + assert.IsType(t, &UpdateErrorState{}, s) + assert.False(t, c) + // artifact name is as expected; update was successful s, c = uvs.Handle(nil, &stateTestController{ hasUpgrade: true,