diff --git a/infrastructure/file_settings_source.go b/infrastructure/file_settings_source.go index 9a68c99a4..e38b0bbc0 100644 --- a/infrastructure/file_settings_source.go +++ b/infrastructure/file_settings_source.go @@ -35,6 +35,9 @@ func NewFileSettingsSource( } func (s *FileSettingsSource) PublicSSHKeyForUsername(string) (string, error) { + if !s.fs.FileExists(s.settingsFilePath) { + return "", bosherr.Errorf("File for settings source does not exist: '%s'", s.settingsFilePath) + } return "", nil } diff --git a/infrastructure/file_settings_source_test.go b/infrastructure/file_settings_source_test.go index fe8bf27fa..4db223be1 100644 --- a/infrastructure/file_settings_source_test.go +++ b/infrastructure/file_settings_source_test.go @@ -26,10 +26,32 @@ var _ = Describe("FileSettingsSource", func() { }) Describe("PublicSSHKeyForUsername", func() { - It("returns an empty string", func() { - publicKey, err := source.PublicSSHKeyForUsername("fake-username") - Expect(err).ToNot(HaveOccurred()) - Expect(publicKey).To(Equal("")) + Context("when the settings file exists", func() { + BeforeEach(func() { + settingsFileName := "/fake-settings-file-path" + source = infrastructure.NewFileSettingsSource(settingsFileName, fs, logger) + err := fs.WriteFileString(settingsFileName, "{}") + Expect(err).NotTo(HaveOccurred()) + }) + + It("returns an empty string", func() { + publicKey, err := source.PublicSSHKeyForUsername("fake-username") + Expect(err).ToNot(HaveOccurred()) + Expect(publicKey).To(Equal("")) + }) + }) + + Context("when the settings file does not exist", func() { + BeforeEach(func() { + source = infrastructure.NewFileSettingsSource("/missing-settings-file-path", fs, logger) + }) + + It("returns an error with the file path", func() { + _, err := source.PublicSSHKeyForUsername("fake-username") + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("File for settings source does not exist")) + Expect(err.Error()).To(ContainSubstring("/missing-settings-file-path")) + }) }) }) diff --git a/infrastructure/multi_settings_source.go b/infrastructure/multi_settings_source.go index 116dd0060..c54703a81 100644 --- a/infrastructure/multi_settings_source.go +++ b/infrastructure/multi_settings_source.go @@ -42,6 +42,7 @@ func (s *MultiSettingsSource) PublicSSHKeyForUsername(username string) (string, s.selectedSSHKeySource = source return publicSSHKey, nil } + s.logger.Warn("multi-settings-source", "Failed to get public SSH key from source: %v", err) } return "", bosherr.WrapErrorf(err, "Getting public SSH key for '%s'", username) diff --git a/infrastructure/multi_settings_source_test.go b/infrastructure/multi_settings_source_test.go index f090ec7fc..ec4777631 100644 --- a/infrastructure/multi_settings_source_test.go +++ b/infrastructure/multi_settings_source_test.go @@ -85,6 +85,11 @@ var _ = Describe("MultiSettingsSource", func() { Expect(err).ToNot(HaveOccurred()) Expect(publicKey).To(Equal("fake-public-key-2")) }) + + It("logs a warning for the first source", func() { + _, _ = source.PublicSSHKeyForUsername("fake-username") //nolint:errcheck + Expect(logBuffer.String()).To(ContainSubstring("fake-public-key-err-1")) + }) }) Context("when both sources fail to get ssh key", func() { @@ -93,6 +98,11 @@ var _ = Describe("MultiSettingsSource", func() { Expect(err).To(HaveOccurred()) Expect(err.Error()).To(ContainSubstring("fake-public-key-err-2")) }) + + It("logs a warning for the first source", func() { + _, _ = source.PublicSSHKeyForUsername("fake-username") //nolint:errcheck + Expect(logBuffer.String()).To(ContainSubstring("fake-public-key-err-1")) + }) }) })