From 67ec4c6d0f4341041fddadbd4f2235e959766838 Mon Sep 17 00:00:00 2001 From: "House.Lee" Date: Thu, 6 Feb 2025 15:16:08 -0800 Subject: [PATCH] Update authorized_keys_file_updater_test.go --- .../authorized_keys_file_updater_test.go | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/internal/sysaccess/authorized_keys_file_updater_test.go b/internal/sysaccess/authorized_keys_file_updater_test.go index 544d1e0..108bf70 100644 --- a/internal/sysaccess/authorized_keys_file_updater_test.go +++ b/internal/sysaccess/authorized_keys_file_updater_test.go @@ -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() @@ -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, @@ -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, @@ -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, @@ -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) @@ -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) }, @@ -189,6 +196,7 @@ 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", @@ -196,9 +204,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(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) }, @@ -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{ @@ -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) } }