-
Notifications
You must be signed in to change notification settings - Fork 778
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Toma Puljak <[email protected]>
- Loading branch information
Showing
10 changed files
with
293 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"gopls": { | ||
"build.buildFlags": [ | ||
"-tags", | ||
"testing" | ||
] | ||
}, | ||
"go.testTags": "testing" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
//go:build testing | ||
|
||
// Copyright 2024 Daytona Platforms Inc. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package mocks | ||
|
||
import ( | ||
"fmt" | ||
"net/http" | ||
"testing" | ||
|
||
"github.com/daytonaio/daytona/pkg/server" | ||
"github.com/daytonaio/daytona/pkg/workspace" | ||
"github.com/gin-gonic/gin" | ||
) | ||
|
||
func NewMockRestServer(t *testing.T, workspace *workspace.Workspace) *http.Server { | ||
router := gin.Default() | ||
serverController := router.Group("/server") | ||
{ | ||
serverController.GET("/config", func(ctx *gin.Context) { | ||
ctx.JSON(200, &server.Config{ | ||
ProvidersDir: "", | ||
RegistryUrl: "", | ||
Id: "", | ||
ServerDownloadUrl: "", | ||
ApiPort: 3000, | ||
HeadscalePort: 4000, | ||
BinariesPath: "", | ||
LogFilePath: "", | ||
}) | ||
}) | ||
serverController.POST("/network-key", func(ctx *gin.Context) { | ||
ctx.JSON(200, &server.NetworkKey{Key: "test-key"}) | ||
}) | ||
} | ||
|
||
workspaceController := router.Group("/workspace") | ||
{ | ||
workspaceController.GET("/:workspaceId", func(ctx *gin.Context) { | ||
ctx.JSON(http.StatusOK, workspace) | ||
}) | ||
} | ||
|
||
gitproviderController := router.Group("/gitprovider") | ||
{ | ||
gitproviderController.GET("/for-url/:url", func(ctx *gin.Context) { | ||
// This simulates a non-configured git provider | ||
ctx.AbortWithError(http.StatusInternalServerError, fmt.Errorf("failed to get git provider for url")) | ||
}) | ||
} | ||
|
||
server := &http.Server{ | ||
Addr: ":3000", | ||
Handler: router, | ||
} | ||
|
||
return server | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
//go:build testing | ||
|
||
// Copyright 2024 Daytona Platforms Inc. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package mocks | ||
|
||
import ( | ||
"github.com/daytonaio/daytona/internal/util/apiclient/server/conversion" | ||
"github.com/daytonaio/daytona/pkg/serverapiclient" | ||
"github.com/daytonaio/daytona/pkg/workspace" | ||
"github.com/stretchr/testify/mock" | ||
) | ||
|
||
type mockGitService struct { | ||
mock.Mock | ||
} | ||
|
||
func (m *mockGitService) CloneRepository(project *serverapiclient.Project, authToken *string) error { | ||
args := m.Called(project, authToken) | ||
return args.Error(0) | ||
} | ||
|
||
func (m *mockGitService) RepositoryExists(project *serverapiclient.Project) (bool, error) { | ||
args := m.Called(project) | ||
return args.Bool(0), args.Error(1) | ||
} | ||
|
||
func (m *mockGitService) SetGitConfig(userData *serverapiclient.GitUser) error { | ||
args := m.Called(userData) | ||
return args.Error(0) | ||
} | ||
|
||
func NewMockGitService(repositoryShouldExist bool, project *workspace.Project) *mockGitService { | ||
gitService := new(mockGitService) | ||
gitService.On("RepositoryExists", conversion.ToProjectDTO(project)).Return(repositoryShouldExist, nil) | ||
if !repositoryShouldExist { | ||
gitService.On("CloneRepository", project, mock.Anything).Return(nil) | ||
} | ||
gitService.On("SetGitConfig", mock.Anything).Return(nil) | ||
|
||
return gitService | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
//go:build testing | ||
|
||
// Copyright 2024 Daytona Platforms Inc. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package mocks | ||
|
||
import "github.com/stretchr/testify/mock" | ||
|
||
type mockSshServer struct { | ||
mock.Mock | ||
} | ||
|
||
func (m *mockSshServer) Start() error { | ||
args := m.Called() | ||
return args.Error(0) | ||
} | ||
|
||
func NewMockSshServer() *mockSshServer { | ||
mockSshServer := new(mockSshServer) | ||
mockSshServer.On("Start").Return(nil) | ||
|
||
return mockSshServer | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
//go:build testing | ||
|
||
// Copyright 2024 Daytona Platforms Inc. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package mocks | ||
|
||
import "github.com/stretchr/testify/mock" | ||
|
||
type mockTailscaleServer struct { | ||
mock.Mock | ||
} | ||
|
||
func (m *mockTailscaleServer) Start() error { | ||
args := m.Called() | ||
return args.Error(0) | ||
} | ||
|
||
func NewMockTailscaleServer() *mockTailscaleServer { | ||
mockTailscaleServer := new(mockTailscaleServer) | ||
mockTailscaleServer.On("Start").Return(nil) | ||
|
||
return mockTailscaleServer | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// Copyright 2024 Daytona Platforms Inc. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package conversion | ||
|
||
import ( | ||
"github.com/daytonaio/daytona/pkg/serverapiclient" | ||
"github.com/daytonaio/daytona/pkg/workspace" | ||
) | ||
|
||
func ToProjectDTO(project *workspace.Project) *serverapiclient.Project { | ||
projectDto := &serverapiclient.Project{ | ||
Name: &project.Name, | ||
Target: &project.Target, | ||
WorkspaceId: &project.WorkspaceId, | ||
Repository: &serverapiclient.GitRepository{ | ||
Id: &project.Repository.Id, | ||
Name: &project.Repository.Name, | ||
Branch: project.Repository.Branch, | ||
Owner: &project.Repository.Owner, | ||
Path: project.Repository.Path, | ||
Sha: &project.Repository.Sha, | ||
Source: &project.Repository.Source, | ||
Url: &project.Repository.Url, | ||
}, | ||
} | ||
|
||
if project.Repository.PrNumber != nil { | ||
prNumber := int32(*project.Repository.PrNumber) | ||
projectDto.Repository.PrNumber = &prNumber | ||
} | ||
|
||
return projectDto | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
// Copyright 2024 Daytona Platforms Inc. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
package agent_test | ||
|
||
import ( | ||
"bytes" | ||
"net/http" | ||
"testing" | ||
|
||
log "github.com/sirupsen/logrus" | ||
"github.com/stretchr/testify/require" | ||
|
||
"github.com/daytonaio/daytona/internal/testing/agent/mocks" | ||
"github.com/daytonaio/daytona/pkg/agent" | ||
"github.com/daytonaio/daytona/pkg/agent/config" | ||
"github.com/daytonaio/daytona/pkg/gitprovider" | ||
"github.com/daytonaio/daytona/pkg/workspace" | ||
) | ||
|
||
var project1 = &workspace.Project{ | ||
Name: "test", | ||
Repository: &gitprovider.GitRepository{ | ||
Id: "123", | ||
Url: "https://github.com/daytonaio/daytona", | ||
Name: "daytona", | ||
}, | ||
WorkspaceId: "123", | ||
Target: "local", | ||
} | ||
|
||
var workspace1 = &workspace.Workspace{ | ||
Id: "123", | ||
Name: "test", | ||
Target: "local", | ||
Projects: []*workspace.Project{ | ||
project1, | ||
}, | ||
} | ||
|
||
var mockConfig = &config.Config{ | ||
WorkspaceId: workspace1.Id, | ||
ProjectName: project1.Name, | ||
Server: config.DaytonaServerConfig{ | ||
Url: "http://localhost:3000", | ||
ApiKey: "test-api-key", | ||
}, | ||
} | ||
|
||
func TestAgent(t *testing.T) { | ||
buf := bytes.Buffer{} | ||
log.SetOutput(&buf) | ||
|
||
apiServer := mocks.NewMockRestServer(t, workspace1) | ||
defer apiServer.Close() | ||
go func() { | ||
if err := apiServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { | ||
log.Fatalf("ListenAndServe(): %s", err) | ||
} | ||
}() | ||
|
||
mockGitService := mocks.NewMockGitService(true, project1) | ||
mockSshServer := mocks.NewMockSshServer() | ||
mockTailscaleServer := mocks.NewMockTailscaleServer() | ||
|
||
mockConfig.ProjectDir = t.TempDir() | ||
|
||
// Create a new Agent instance | ||
a := &agent.Agent{ | ||
Config: mockConfig, | ||
Git: mockGitService, | ||
Ssh: mockSshServer, | ||
Tailscale: mockTailscaleServer, | ||
} | ||
|
||
t.Run("Start agent", func(t *testing.T) { | ||
err := a.Start() | ||
|
||
require.Nil(t, err) | ||
}) | ||
|
||
t.Cleanup(func() { | ||
mockGitService.AssertExpectations(t) | ||
mockSshServer.AssertExpectations(t) | ||
mockTailscaleServer.AssertExpectations(t) | ||
}) | ||
} |