Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
5b31494
add auxiliary command server proto
aphralG Jun 11, 2025
c42a042
Merge branch 'main' into add-auxiliary-command-server-proto
aphralG Jun 12, 2025
e07bf64
allow multiple management planes
aphralG Jun 12, 2025
a6b6e52
start of file plugins
aphralG Jun 16, 2025
650a0d9
PR feedback
aphralG Jun 16, 2025
8c422cc
Merge branch 'add-auxiliary-command-server-to-agent-config' into add-…
aphralG Jun 16, 2025
8ef9c26
file plugin
aphralG Jun 16, 2025
a8817ab
file plugin
aphralG Jun 16, 2025
b81fb37
allow second credential watcher
aphralG Jun 17, 2025
f958507
Merge branch 'main' into add-auxiliary-command-server-proto
aphralG Jun 23, 2025
2487a4d
Merge branch 'add-auxiliary-command-server-proto' into add-auxiliary-…
aphralG Jun 23, 2025
b710855
PR feedback
aphralG Jun 23, 2025
90cd7f9
merge main
aphralG Jun 23, 2025
8ef3c45
refactor file plugin to have read only mode
aphralG Jun 23, 2025
5773b42
clean up
aphralG Jun 23, 2025
d065710
Merge branch 'add-read-only-file-plugin' into allow-second-credential…
aphralG Jun 23, 2025
753ee94
feedback
aphralG Jun 23, 2025
d586259
fix race condition
aphralG Jun 23, 2025
a8d5b29
Pr feedback
aphralG Jun 26, 2025
fbbe418
merge main
aphralG Jun 27, 2025
1fa09b9
Merge branch 'add-auxiliary-command-server-proto' into add-auxiliary-…
aphralG Jun 27, 2025
8e26d81
PR feedback
aphralG Jun 27, 2025
4091223
Merge branch 'add-auxiliary-command-server-to-agent-config' into add-…
aphralG Jun 27, 2025
c6c3cca
Merge branch 'add-read-only-file-plugin' into allow-second-credential…
aphralG Jun 27, 2025
f2d1fb2
PR feedback
aphralG Jun 27, 2025
e4423de
Merge branch 'add-auxiliary-command-server-to-agent-config' into add-…
aphralG Jun 27, 2025
6d39669
PR feedback
aphralG Jun 27, 2025
0d86529
PR feedback
aphralG Jun 27, 2025
0a95a38
PR feedback
aphralG Jun 27, 2025
ee42007
Merge branch 'add-read-only-file-plugin' into allow-second-credential…
aphralG Jun 27, 2025
d08ba6f
PR feedback
aphralG Jun 27, 2025
3f39fbf
fix message response
aphralG Jun 27, 2025
d27b85a
start of integration tests
aphralG Jun 30, 2025
30dc211
add file overview endpoint to mock
aphralG Jun 30, 2025
08fa4db
Merge branch 'main' into add-auxiliary-command-server-proto
aphralG Jul 1, 2025
44f1e1e
merge main
aphralG Jul 1, 2025
16b08c0
Merge branch 'add-auxiliary-command-server-proto' into add-auxiliary-…
aphralG Jul 1, 2025
845f3dd
fix instance ID
aphralG Jul 1, 2025
bf98852
Merge branch 'add-auxiliary-command-server-to-agent-config' into add-…
aphralG Jul 1, 2025
f32f34a
Merge branch 'add-read-only-file-plugin' into allow-second-credential…
aphralG Jul 1, 2025
cb58452
Merge branch 'allow-second-credential-watcher' into add-multi-managem…
aphralG Jul 1, 2025
9c61e4c
update message
aphralG Jul 2, 2025
9cc8351
Merge branch 'allow-second-credential-watcher' into add-multi-managem…
aphralG Jul 2, 2025
8f35043
update agent config
aphralG Jul 3, 2025
70da7a5
update agent config
aphralG Jul 3, 2025
cb0e64a
update agent config
aphralG Jul 3, 2025
f85b4c7
try fix test
aphralG Jul 3, 2025
5c55151
try fix test
aphralG Jul 3, 2025
cd92239
Merge branch 'allow-second-credential-watcher' into add-multi-managem…
aphralG Jul 3, 2025
fcbc755
some working tests, config apply test broken
aphralG Jul 3, 2025
885e657
format stuff
aphralG Jul 3, 2025
8a25503
clean up
aphralG Jul 3, 2025
e6bbad5
added config apply test
aphralG Jul 7, 2025
f5d93b8
run on official tests
aphralG Jul 7, 2025
b1d1b4a
PR feedback
aphralG Jul 7, 2025
b728b91
merge main
aphralG Jul 7, 2025
1de9c00
Merge branch 'add-read-only-file-plugin' into allow-second-credential…
aphralG Jul 7, 2025
b70dcc7
merge main
aphralG Jul 7, 2025
5c87492
merge main
aphralG Jul 7, 2025
04c5512
Merge branch 'main' into add-multi-management-plane-integration-test
aphralG Jul 8, 2025
f035a05
fix test and race
aphralG Jul 9, 2025
93e00e6
fix test and race
aphralG Jul 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -161,13 +161,13 @@ integration-test: $(SELECTED_PACKAGE) build-mock-management-plane-grpc
TEST_ENV="Container" CONTAINER_OS_TYPE=$(CONTAINER_OS_TYPE) BUILD_TARGET="install-agent-local" CONTAINER_NGINX_IMAGE_REGISTRY=${CONTAINER_NGINX_IMAGE_REGISTRY} \
PACKAGES_REPO=$(OSS_PACKAGES_REPO) PACKAGE_NAME=$(PACKAGE_NAME) BASE_IMAGE=$(BASE_IMAGE) DOCKERFILE_PATH=$(DOCKERFILE_PATH) IMAGE_PATH=$(IMAGE_PATH) TAG=${IMAGE_TAG} \
OS_VERSION=$(OS_VERSION) OS_RELEASE=$(OS_RELEASE) \
go test -v ./test/integration/installuninstall ./test/integration/managementplane ./test/integration/nginxless
go test -v ./test/integration/installuninstall ./test/integration/managementplane ./test/integration/auxiliarycommandserver ./test/integration/nginxless

official-image-integration-test: $(SELECTED_PACKAGE) build-mock-management-plane-grpc
TEST_ENV="Container" CONTAINER_OS_TYPE=$(CONTAINER_OS_TYPE) CONTAINER_NGINX_IMAGE_REGISTRY=${CONTAINER_NGINX_IMAGE_REGISTRY} BUILD_TARGET="install" \
PACKAGES_REPO=$(OSS_PACKAGES_REPO) TAG=${TAG} PACKAGE_NAME=$(PACKAGE_NAME) BASE_IMAGE=$(BASE_IMAGE) DOCKERFILE_PATH=$(OFFICIAL_IMAGE_DOCKERFILE_PATH) \
OS_VERSION=$(OS_VERSION) OS_RELEASE=$(OS_RELEASE) IMAGE_PATH=$(IMAGE_PATH) \
go test -v ./test/integration/managementplane
go test -v ./test/integration/managementplane ./test/integration/auxiliarycommandserver

performance-test:
@mkdir -p $(TEST_BUILD_DIR)
Expand Down
20 changes: 17 additions & 3 deletions internal/file/file_manager_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ type (
)

type FileManagerService struct {
manifestLock *sync.RWMutex
agentConfig *config.Config
fileOperator fileOperator
fileServiceOperator fileServiceOperatorInterface
Expand All @@ -102,16 +103,19 @@ type FileManagerService struct {
filesMutex sync.RWMutex
}

func NewFileManagerService(fileServiceClient mpi.FileServiceClient, agentConfig *config.Config) *FileManagerService {
func NewFileManagerService(fileServiceClient mpi.FileServiceClient, agentConfig *config.Config,
manifestLock *sync.RWMutex,
) *FileManagerService {
return &FileManagerService{
agentConfig: agentConfig,
fileOperator: NewFileOperator(),
fileServiceOperator: NewFileServiceOperator(agentConfig, fileServiceClient),
fileOperator: NewFileOperator(manifestLock),
fileServiceOperator: NewFileServiceOperator(agentConfig, fileServiceClient, manifestLock),
fileActions: make(map[string]*model.FileCache),
rollbackFileContents: make(map[string][]byte),
currentFilesOnDisk: make(map[string]*mpi.File),
previousManifestFiles: make(map[string]*model.ManifestFile),
manifestFilePath: agentConfig.ManifestDir + "/manifest.json",
manifestLock: manifestLock,
}
}

Expand Down Expand Up @@ -423,9 +427,13 @@ func (fms *FileManagerService) UpdateCurrentFilesOnDisk(
// seems to be a control flag, avoid control coupling
// nolint: revive
func (fms *FileManagerService) UpdateManifestFile(currentFiles map[string]*mpi.File, referenced bool) (err error) {
slog.Debug("Updating manifest file", "current_files", currentFiles, "referenced", referenced)
currentManifestFiles, _, readError := fms.manifestFile()
fms.previousManifestFiles = currentManifestFiles
if readError != nil && !errors.Is(readError, os.ErrNotExist) {
slog.Debug("Error reading manifest file", "current_manifest_files",
currentManifestFiles, "updated_files", currentFiles, "referenced", referenced)

return fmt.Errorf("unable to read manifest file: %w", readError)
}

Expand Down Expand Up @@ -457,6 +465,8 @@ func (fms *FileManagerService) manifestFile() (map[string]*model.ManifestFile, m
return nil, nil, err
}

fms.manifestLock.Lock()
defer fms.manifestLock.Unlock()
file, err := os.ReadFile(fms.manifestFilePath)
if err != nil {
return nil, nil, fmt.Errorf("failed to read manifest file: %w", err)
Expand All @@ -466,6 +476,10 @@ func (fms *FileManagerService) manifestFile() (map[string]*model.ManifestFile, m

err = json.Unmarshal(file, &manifestFiles)
if err != nil {
if len(file) == 0 {
return nil, nil, fmt.Errorf("manifest file is empty: %w", err)
}

return nil, nil, fmt.Errorf("failed to parse manifest file: %w", err)
}

Expand Down
21 changes: 11 additions & 10 deletions internal/file/file_manager_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"fmt"
"os"
"path/filepath"
"sync"
"testing"

"github.com/nginx/agent/v3/internal/model"
Expand Down Expand Up @@ -54,7 +55,7 @@ func TestFileManagerService_ConfigApply_Add(t *testing.T) {
agentConfig := types.AgentConfig()
agentConfig.AllowedDirectories = []string{tempDir}

fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig)
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig, &sync.RWMutex{})
fileManagerService.agentConfig.ManifestDir = manifestDirPath
fileManagerService.manifestFilePath = manifestFilePath

Expand Down Expand Up @@ -101,7 +102,7 @@ func TestFileManagerService_ConfigApply_Add_LargeFile(t *testing.T) {
fakeFileServiceClient.GetFileStreamReturns(fakeServerStreamingClient, nil)
agentConfig := types.AgentConfig()
agentConfig.AllowedDirectories = []string{tempDir}
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig)
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig, &sync.RWMutex{})
fileManagerService.agentConfig.ManifestDir = manifestDirPath
fileManagerService.manifestFilePath = manifestFilePath

Expand Down Expand Up @@ -160,7 +161,7 @@ func TestFileManagerService_ConfigApply_Update(t *testing.T) {
agentConfig := types.AgentConfig()
agentConfig.AllowedDirectories = []string{tempDir}

fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig)
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig, &sync.RWMutex{})
fileManagerService.agentConfig.ManifestDir = manifestDirPath
fileManagerService.manifestFilePath = manifestFilePath
err := fileManagerService.UpdateCurrentFilesOnDisk(ctx, filesOnDisk, false)
Expand Down Expand Up @@ -209,7 +210,7 @@ func TestFileManagerService_ConfigApply_Delete(t *testing.T) {
agentConfig := types.AgentConfig()
agentConfig.AllowedDirectories = []string{tempDir}

fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig)
fileManagerService := NewFileManagerService(fakeFileServiceClient, agentConfig, &sync.RWMutex{})
fileManagerService.agentConfig.ManifestDir = manifestDirPath
fileManagerService.manifestFilePath = manifestFilePath
err := fileManagerService.UpdateCurrentFilesOnDisk(ctx, filesOnDisk, false)
Expand Down Expand Up @@ -247,7 +248,7 @@ func TestFileManagerService_ConfigApply_Delete(t *testing.T) {

func TestFileManagerService_checkAllowedDirectory(t *testing.T) {
fakeFileServiceClient := &v1fakes.FakeFileServiceClient{}
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig(), &sync.RWMutex{})

allowedFiles := []*mpi.File{
{
Expand Down Expand Up @@ -281,7 +282,7 @@ func TestFileManagerService_checkAllowedDirectory(t *testing.T) {

func TestFileManagerService_ClearCache(t *testing.T) {
fakeFileServiceClient := &v1fakes.FakeFileServiceClient{}
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig(), &sync.RWMutex{})

filesCache := map[string]*model.FileCache{
"file/path/test.conf": {
Expand Down Expand Up @@ -394,7 +395,7 @@ func TestFileManagerService_Rollback(t *testing.T) {

instanceID := protos.NginxOssInstance([]string{}).GetInstanceMeta().GetInstanceId()
fakeFileServiceClient := &v1fakes.FakeFileServiceClient{}
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig(), &sync.RWMutex{})
fileManagerService.rollbackFileContents = fileContentCache
fileManagerService.fileActions = filesCache
fileManagerService.agentConfig.ManifestDir = manifestDirPath
Expand Down Expand Up @@ -576,7 +577,7 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) {
manifestFilePath := manifestFile.Name()

fakeFileServiceClient := &v1fakes.FakeFileServiceClient{}
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig(), &sync.RWMutex{})
fileManagerService.agentConfig.ManifestDir = manifestDirPath
fileManagerService.manifestFilePath = manifestFilePath

Expand All @@ -597,7 +598,7 @@ func TestFileManagerService_DetermineFileActions(t *testing.T) {
func CreateTestManifestFile(t testing.TB, tempDir string, currentFiles map[string]*mpi.File) *os.File {
t.Helper()
fakeFileServiceClient := &v1fakes.FakeFileServiceClient{}
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig(), &sync.RWMutex{})
manifestFiles := fileManagerService.convertToManifestFileMap(currentFiles, true)
manifestJSON, err := json.MarshalIndent(manifestFiles, "", " ")
require.NoError(t, err)
Expand Down Expand Up @@ -685,7 +686,7 @@ func TestFileManagerService_fileActions(t *testing.T) {
Contents: newFileContent,
},
}, nil)
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig())
fileManagerService := NewFileManagerService(fakeFileServiceClient, types.AgentConfig(), &sync.RWMutex{})

fileManagerService.fileActions = filesCache

Expand Down
13 changes: 10 additions & 3 deletions internal/file/file_operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"log/slog"
"os"
"path"
"sync"

"github.com/nginx/agent/v3/internal/model"

Expand All @@ -24,14 +25,18 @@ import (
mpi "github.com/nginx/agent/v3/api/grpc/mpi/v1"
)

type FileOperator struct{}
type FileOperator struct {
manifestLock *sync.RWMutex
}

var _ fileOperator = (*FileOperator)(nil)

// FileOperator only purpose is to write files,

func NewFileOperator() *FileOperator {
return &FileOperator{}
func NewFileOperator(manifestLock *sync.RWMutex) *FileOperator {
return &FileOperator{
manifestLock: manifestLock,
}
}

func (fo *FileOperator) Write(ctx context.Context, fileContent []byte, file *mpi.FileMeta) error {
Expand Down Expand Up @@ -152,6 +157,8 @@ func (fo *FileOperator) WriteManifestFile(updatedFiles map[string]*model.Manifes
return fmt.Errorf("unable to marshal manifest file json: %w", err)
}

fo.manifestLock.Lock()
defer fo.manifestLock.Unlock()
// 0755 allows read/execute for all, write for owner
if err = os.MkdirAll(manifestDir, dirPerm); err != nil {
return fmt.Errorf("unable to create directory %s: %w", manifestDir, err)
Expand Down
3 changes: 2 additions & 1 deletion internal/file/file_operator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"context"
"os"
"path/filepath"
"sync"
"testing"

"github.com/nginx/agent/v3/pkg/files"
Expand All @@ -28,7 +29,7 @@ func TestFileOperator_Write(t *testing.T) {
fileContent, err := os.ReadFile("../../test/config/nginx/nginx.conf")
require.NoError(t, err)
defer helpers.RemoveFileWithErrorCheck(t, filePath)
fileOp := NewFileOperator()
fileOp := NewFileOperator(&sync.RWMutex{})

fileMeta := protos.FileMeta(filePath, files.GenerateHash(fileContent))

Expand Down
15 changes: 9 additions & 6 deletions internal/file/file_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ package file
import (
"context"
"log/slog"
"sync"

"github.com/nginx/agent/v3/pkg/files"
"github.com/nginx/agent/v3/pkg/id"
Expand All @@ -27,6 +28,7 @@ var _ bus.Plugin = (*FilePlugin)(nil)
// the file plugin does not care about the instance type

type FilePlugin struct {
manifestLock *sync.RWMutex
messagePipe bus.MessagePipeInterface
config *config.Config
conn grpc.GrpcConnectionInterface
Expand All @@ -35,12 +37,13 @@ type FilePlugin struct {
}

func NewFilePlugin(agentConfig *config.Config, grpcConnection grpc.GrpcConnectionInterface,
serverType model.ServerType,
serverType model.ServerType, manifestLock *sync.RWMutex,
) *FilePlugin {
return &FilePlugin{
config: agentConfig,
conn: grpcConnection,
serverType: serverType,
config: agentConfig,
conn: grpcConnection,
serverType: serverType,
manifestLock: manifestLock,
}
}

Expand All @@ -52,7 +55,7 @@ func (fp *FilePlugin) Init(ctx context.Context, messagePipe bus.MessagePipeInter
slog.DebugContext(ctx, "Starting file plugin")

fp.messagePipe = messagePipe
fp.fileManagerService = NewFileManagerService(fp.conn.FileServiceClient(), fp.config)
fp.fileManagerService = NewFileManagerService(fp.conn.FileServiceClient(), fp.config, fp.manifestLock)

return nil
}
Expand Down Expand Up @@ -145,7 +148,7 @@ func (fp *FilePlugin) handleConnectionReset(ctx context.Context, msg *bus.Messag
fp.conn = newConnection

reconnect = fp.fileManagerService.IsConnected()
fp.fileManagerService = NewFileManagerService(fp.conn.FileServiceClient(), fp.config)
fp.fileManagerService = NewFileManagerService(fp.conn.FileServiceClient(), fp.config, fp.manifestLock)
fp.fileManagerService.SetIsConnected(reconnect)

slog.DebugContext(ctx, "File manager service client reset successfully")
Expand Down
26 changes: 15 additions & 11 deletions internal/file/file_plugin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"context"
"fmt"
"os"
"sync"
"testing"
"time"

Expand All @@ -31,22 +32,24 @@ import (
)

func TestFilePlugin_Info(t *testing.T) {
filePlugin := NewFilePlugin(types.AgentConfig(), &grpcfakes.FakeGrpcConnectionInterface{}, model.Command)
filePlugin := NewFilePlugin(types.AgentConfig(), &grpcfakes.FakeGrpcConnectionInterface{},
model.Command, &sync.RWMutex{})
assert.Equal(t, "file", filePlugin.Info().Name)
}

func TestFilePlugin_Close(t *testing.T) {
ctx := context.Background()
fakeGrpcConnection := &grpcfakes.FakeGrpcConnectionInterface{}

filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command, &sync.RWMutex{})
filePlugin.Close(ctx)

assert.Equal(t, 1, fakeGrpcConnection.CloseCallCount())
}

func TestFilePlugin_Subscriptions(t *testing.T) {
filePlugin := NewFilePlugin(types.AgentConfig(), &grpcfakes.FakeGrpcConnectionInterface{}, model.Command)
filePlugin := NewFilePlugin(types.AgentConfig(), &grpcfakes.FakeGrpcConnectionInterface{},
model.Command, &sync.RWMutex{})
assert.Equal(
t,
[]string{
Expand All @@ -62,7 +65,8 @@ func TestFilePlugin_Subscriptions(t *testing.T) {
filePlugin.Subscriptions(),
)

readOnlyFilePlugin := NewFilePlugin(types.AgentConfig(), &grpcfakes.FakeGrpcConnectionInterface{}, model.Auxiliary)
readOnlyFilePlugin := NewFilePlugin(types.AgentConfig(), &grpcfakes.FakeGrpcConnectionInterface{},
model.Auxiliary, &sync.RWMutex{})
assert.Equal(t, []string{
bus.ConnectionResetTopic,
bus.ConnectionCreatedTopic,
Expand Down Expand Up @@ -93,7 +97,7 @@ func TestFilePlugin_Process_NginxConfigUpdateTopic(t *testing.T) {
fakeGrpcConnection.FileServiceClientReturns(fakeFileServiceClient)
messagePipe := busfakes.NewFakeMessagePipe()

filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command, &sync.RWMutex{})
err := filePlugin.Init(ctx, messagePipe)
require.NoError(t, err)

Expand Down Expand Up @@ -168,7 +172,7 @@ func TestFilePlugin_Process_ConfigApplyRequestTopic(t *testing.T) {
fakeFileManagerService := &filefakes.FakeFileManagerServiceInterface{}
fakeFileManagerService.ConfigApplyReturns(test.configApplyStatus, test.configApplyReturnsErr)
messagePipe := busfakes.NewFakeMessagePipe()
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command, &sync.RWMutex{})
err := filePlugin.Init(ctx, messagePipe)
filePlugin.fileManagerService = fakeFileManagerService
require.NoError(t, err)
Expand Down Expand Up @@ -266,7 +270,7 @@ func TestFilePlugin_Process_ConfigUploadRequestTopic(t *testing.T) {
fakeGrpcConnection.FileServiceClientReturns(fakeFileServiceClient)
messagePipe := busfakes.NewFakeMessagePipe()

filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command, &sync.RWMutex{})
err := filePlugin.Init(ctx, messagePipe)
require.NoError(t, err)

Expand Down Expand Up @@ -321,7 +325,7 @@ func TestFilePlugin_Process_ConfigUploadRequestTopic_Failure(t *testing.T) {
fakeGrpcConnection.FileServiceClientReturns(fakeFileServiceClient)
messagePipe := busfakes.NewFakeMessagePipe()

filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(types.AgentConfig(), fakeGrpcConnection, model.Command, &sync.RWMutex{})
err := filePlugin.Init(ctx, messagePipe)
require.NoError(t, err)

Expand Down Expand Up @@ -389,7 +393,7 @@ func TestFilePlugin_Process_ConfigApplyFailedTopic(t *testing.T) {

messagePipe := busfakes.NewFakeMessagePipe()
agentConfig := types.AgentConfig()
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command, &sync.RWMutex{})

err := filePlugin.Init(ctx, messagePipe)
require.NoError(t, err)
Expand Down Expand Up @@ -436,7 +440,7 @@ func TestFilePlugin_Process_ConfigApplyRollbackCompleteTopic(t *testing.T) {
messagePipe := busfakes.NewFakeMessagePipe()
agentConfig := types.AgentConfig()
fakeGrpcConnection := &grpcfakes.FakeGrpcConnectionInterface{}
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command, &sync.RWMutex{})

err := filePlugin.Init(ctx, messagePipe)
require.NoError(t, err)
Expand Down Expand Up @@ -481,7 +485,7 @@ func TestFilePlugin_Process_ConfigApplyCompleteTopic(t *testing.T) {
messagePipe := busfakes.NewFakeMessagePipe()
agentConfig := types.AgentConfig()
fakeGrpcConnection := &grpcfakes.FakeGrpcConnectionInterface{}
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command)
filePlugin := NewFilePlugin(agentConfig, fakeGrpcConnection, model.Command, &sync.RWMutex{})

err := filePlugin.Init(ctx, messagePipe)
require.NoError(t, err)
Expand Down
Loading