Skip to content

Commit

Permalink
Update authorized_keys_file_updater_test.go
Browse files Browse the repository at this point in the history
  • Loading branch information
house-lee committed Feb 6, 2025
1 parent 8686663 commit 67ec4c6
Showing 1 changed file with 27 additions and 17 deletions.
44 changes: 27 additions & 17 deletions internal/sysaccess/authorized_keys_file_updater_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,19 @@ type recorder struct {
bytes.Buffer
closeCalled int
expectedRes string
filename string
}

func (r *recorder) Close() error {
r.closeCalled++
return nil
}
func (r *recorder) Name() string {
return r.filename
}
func (r *recorder) Stat() (os.FileInfo, error) {
return nil, nil
}

func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
log.Mute()
Expand Down Expand Up @@ -98,7 +105,7 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return(nil, readFileErr)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return(nil, readFileErr)
},
[]*SSHKey{
validKey1,
Expand All @@ -112,9 +119,9 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return(nil, os.ErrNotExist)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return(nil, os.ErrNotExist)
sshHelper.EXPECT().prepareAuthorizedKeys(gomock.Any(), gomock.Any()).Return([]string{})
sysMgr.EXPECT().CreateFileForWrite(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, createFileErr)
sysMgr.EXPECT().CreateTempFile(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, createFileErr)
},
[]*SSHKey{
validKey1,
Expand All @@ -128,9 +135,9 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return(nil, os.ErrNotExist)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return(nil, os.ErrNotExist)
sshHelper.EXPECT().prepareAuthorizedKeys([]string{}, []*SSHKey{validKey1}).Return([]string{"line1", "line2"})
sysMgr.EXPECT().CreateFileForWrite(authorizedKeyFile+".dotty", validUser1, os.FileMode(0600)).Return(nil, createFileErr)
sysMgr.EXPECT().CreateTempFile(authorizedKeyFileDir, "authorized_keys-*.dotty", validUser1).Return(nil, createFileErr)
},
[]*SSHKey{
validKey1,
Expand All @@ -142,13 +149,13 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
"should properly write files to tmp file and remove it if error happens",
func(sysMgr *mocks.MocksysManager, sshHelper *MocksshHelper, recorder *recorder) {
tmpFile := authorizedKeyFile + ".dotty"

recorder.filename = tmpFile
sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return([]byte{}, nil)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return([]byte{}, nil)
sshHelper.EXPECT().prepareAuthorizedKeys([]string{""}, []*SSHKey{validKey1}).Return([]string{"line1", "line2"})
sysMgr.EXPECT().CreateFileForWrite(tmpFile, validUser1, os.FileMode(0600)).Return(recorder, nil)
sysMgr.EXPECT().CreateTempFile(authorizedKeyFileDir, "authorized_keys-*.dotty", validUser1).Return(recorder, nil)
sysMgr.EXPECT().CopyFileAttribute(authorizedKeyFile, tmpFile).Return(nil)
sysMgr.EXPECT().RenameFile(gomock.Any(), gomock.Any()).Return(errors.New("rename-error"))
sysMgr.EXPECT().RemoveFile(tmpFile).Return(nil)
Expand All @@ -166,13 +173,13 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
"should properly write files to tmp file and rename it to original file",
func(sysMgr *mocks.MocksysManager, sshHelper *MocksshHelper, recorder *recorder) {
tmpFile := authorizedKeyFile + ".dotty"

recorder.filename = tmpFile
sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return([]byte{}, nil)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return([]byte{}, nil)
sshHelper.EXPECT().prepareAuthorizedKeys([]string{""}, []*SSHKey{validKey1}).Return([]string{"line1", "line2"})
sysMgr.EXPECT().CreateFileForWrite(tmpFile, validUser1, os.FileMode(0600)).Return(recorder, nil)
sysMgr.EXPECT().CreateTempFile(authorizedKeyFileDir, "authorized_keys-*.dotty", validUser1).Return(recorder, nil)
sysMgr.EXPECT().CopyFileAttribute(authorizedKeyFile, tmpFile).Return(nil)
sysMgr.EXPECT().RenameFile(tmpFile, authorizedKeyFile).Return(nil)
},
Expand All @@ -189,16 +196,17 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
"should read existing keys and attempt to merge",
func(sysMgr *mocks.MocksysManager, sshHelper *MocksshHelper, recorder *recorder) {
tmpFile := authorizedKeyFile + ".dotty"
recorder.filename = tmpFile
localKeysRaw := []byte("local1\nlocal2\nlocal3\n\n\n")
localKeys := []string{
"local1", "local2", "local3",
}
sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return(localKeysRaw, nil)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return(localKeysRaw, nil)
sshHelper.EXPECT().prepareAuthorizedKeys(localKeys, []*SSHKey{validKey1}).Return([]string{"local1", "local2", "local3", "line1", "line2"})
sysMgr.EXPECT().CreateFileForWrite(tmpFile, validUser1, os.FileMode(0600)).Return(recorder, nil)
sysMgr.EXPECT().CreateTempFile(authorizedKeyFileDir, "authorized_keys-*.dotty", validUser1).Return(recorder, nil)
sysMgr.EXPECT().CopyFileAttribute(authorizedKeyFile, tmpFile).Return(nil)
sysMgr.EXPECT().RenameFile(tmpFile, authorizedKeyFile).Return(nil)
},
Expand All @@ -215,13 +223,14 @@ func Test_updaterImpl_updateAuthorizedKeysFile(t *testing.T) {
"should skip copying file attribute if original file not exists",
func(sysMgr *mocks.MocksysManager, sshHelper *MocksshHelper, recorder *recorder) {
tmpFile := authorizedKeyFile + ".dotty"
recorder.filename = tmpFile

sysMgr.EXPECT().GetUserByName(osUsername).Return(validUser1, nil)
sshHelper.EXPECT().authorizedKeysFile(validUser1).Return(authorizedKeyFile)
sysMgr.EXPECT().MkDirIfNonExist(authorizedKeyFileDir, validUser1, os.FileMode(0700)).Return(nil)
sysMgr.EXPECT().ReadFile(authorizedKeyFile).Return(nil, os.ErrNotExist)
sysMgr.EXPECT().ReadFileOfUser(authorizedKeyFile, validUser1).Return(nil, os.ErrNotExist)
sshHelper.EXPECT().prepareAuthorizedKeys([]string{}, []*SSHKey{validKey1}).Return([]string{"line1", "line2"})
sysMgr.EXPECT().CreateFileForWrite(tmpFile, validUser1, os.FileMode(0600)).Return(recorder, nil)
sysMgr.EXPECT().CreateTempFile(authorizedKeyFileDir, "authorized_keys-*.dotty", validUser1).Return(recorder, nil)
sysMgr.EXPECT().RenameFile(tmpFile, authorizedKeyFile).Return(nil)
},
[]*SSHKey{
Expand Down Expand Up @@ -322,11 +331,12 @@ func Test_updaterImpl_updateAuthorizedKeysFile_threadSafe(t *testing.T) {

originalFile := ""
for j := 0; j != concurrentUpdatePerUser; j++ {
recorders[i][j].filename = tmpFilePath
originalFile += "key\n"
localKeys := strings.Split(strings.TrimRight(originalFile, "\n"), "\n")
sysMgrMock.EXPECT().ReadFile(keysFile).Return([]byte(originalFile), nil)
sysMgrMock.EXPECT().ReadFileOfUser(keysFile, user).Return([]byte(originalFile), nil)
sshHelperMock.EXPECT().prepareAuthorizedKeys(localKeys, fakeKeys).Return(append(localKeys, "key"))
sysMgrMock.EXPECT().CreateFileForWrite(tmpFilePath, user, os.FileMode(0600)).Return(recorders[i][j], nil)
sysMgrMock.EXPECT().CreateTempFile(filepath.Dir(keysFile), "authorized_keys-*.dotty", user).Return(recorders[i][j], nil)
}

}
Expand Down

0 comments on commit 67ec4c6

Please sign in to comment.