mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
154 lines
4.7 KiB
Go
154 lines
4.7 KiB
Go
|
|
package cloudintegrations
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/google/uuid"
|
||
|
|
"github.com/stretchr/testify/require"
|
||
|
|
"go.signoz.io/signoz/pkg/query-service/model"
|
||
|
|
"go.signoz.io/signoz/pkg/query-service/utils"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestRegenerateConnectionUrlWithUpdatedConfig(t *testing.T) {
|
||
|
|
require := require.New(t)
|
||
|
|
testDB, _ := utils.NewTestSqliteDB(t)
|
||
|
|
controller, err := NewController(testDB)
|
||
|
|
require.NoError(err)
|
||
|
|
|
||
|
|
// should be able to generate connection url for
|
||
|
|
// same account id again with updated config
|
||
|
|
testAccountConfig1 := AccountConfig{EnabledRegions: []string{"us-east-1", "us-west-1"}}
|
||
|
|
resp1, apiErr := controller.GenerateConnectionUrl(
|
||
|
|
context.TODO(), "aws", GenerateConnectionUrlRequest{
|
||
|
|
AccountConfig: testAccountConfig1,
|
||
|
|
AgentConfig: SigNozAgentConfig{Region: "us-east-2"},
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
require.NotEmpty(resp1.ConnectionUrl)
|
||
|
|
require.NotEmpty(resp1.AccountId)
|
||
|
|
|
||
|
|
testAccountId := resp1.AccountId
|
||
|
|
account, apiErr := controller.repo.get(
|
||
|
|
context.TODO(), "aws", testAccountId,
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
require.Equal(testAccountConfig1, *account.Config)
|
||
|
|
|
||
|
|
testAccountConfig2 := AccountConfig{EnabledRegions: []string{"us-east-2", "us-west-2"}}
|
||
|
|
resp2, apiErr := controller.GenerateConnectionUrl(
|
||
|
|
context.TODO(), "aws", GenerateConnectionUrlRequest{
|
||
|
|
AccountId: &testAccountId,
|
||
|
|
AccountConfig: testAccountConfig2,
|
||
|
|
AgentConfig: SigNozAgentConfig{Region: "us-east-2"},
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
require.Equal(testAccountId, resp2.AccountId)
|
||
|
|
|
||
|
|
account, apiErr = controller.repo.get(
|
||
|
|
context.TODO(), "aws", testAccountId,
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
require.Equal(testAccountConfig2, *account.Config)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAgentCheckIns(t *testing.T) {
|
||
|
|
require := require.New(t)
|
||
|
|
testDB, _ := utils.NewTestSqliteDB(t)
|
||
|
|
controller, err := NewController(testDB)
|
||
|
|
require.NoError(err)
|
||
|
|
|
||
|
|
// An agent should be able to check in from a cloud account even
|
||
|
|
// if no connection url was requested (no account with agent's account id exists)
|
||
|
|
testAccountId1 := uuid.NewString()
|
||
|
|
testCloudAccountId1 := "546311234"
|
||
|
|
resp1, apiErr := controller.CheckInAsAgent(
|
||
|
|
context.TODO(), "aws", AgentCheckInRequest{
|
||
|
|
AccountId: testAccountId1,
|
||
|
|
CloudAccountId: testCloudAccountId1,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
require.Equal(testAccountId1, resp1.Account.Id)
|
||
|
|
require.Equal(testCloudAccountId1, *resp1.Account.CloudAccountId)
|
||
|
|
|
||
|
|
// The agent should not be able to check in with a different
|
||
|
|
// cloud account id for the same account.
|
||
|
|
testCloudAccountId2 := "99999999"
|
||
|
|
_, apiErr = controller.CheckInAsAgent(
|
||
|
|
context.TODO(), "aws", AgentCheckInRequest{
|
||
|
|
AccountId: testAccountId1,
|
||
|
|
CloudAccountId: testCloudAccountId2,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.NotNil(apiErr)
|
||
|
|
|
||
|
|
// The agent should not be able to check-in with a particular cloud account id
|
||
|
|
// if another connected AccountRecord exists for same cloud account
|
||
|
|
// i.e. there can't be 2 connected account records for the same cloud account id
|
||
|
|
// at any point in time.
|
||
|
|
existingConnected, apiErr := controller.repo.getConnectedCloudAccount(
|
||
|
|
context.TODO(), "aws", testCloudAccountId1,
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
require.NotNil(existingConnected)
|
||
|
|
require.Equal(testCloudAccountId1, *existingConnected.CloudAccountId)
|
||
|
|
require.Nil(existingConnected.RemovedAt)
|
||
|
|
|
||
|
|
testAccountId2 := uuid.NewString()
|
||
|
|
_, apiErr = controller.CheckInAsAgent(
|
||
|
|
context.TODO(), "aws", AgentCheckInRequest{
|
||
|
|
AccountId: testAccountId2,
|
||
|
|
CloudAccountId: testCloudAccountId1,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.NotNil(apiErr)
|
||
|
|
|
||
|
|
// After disconnecting existing account record, the agent should be able to
|
||
|
|
// connected for a particular cloud account id
|
||
|
|
_, apiErr = controller.DisconnectAccount(
|
||
|
|
context.TODO(), "aws", testAccountId1,
|
||
|
|
)
|
||
|
|
|
||
|
|
existingConnected, apiErr = controller.repo.getConnectedCloudAccount(
|
||
|
|
context.TODO(), "aws", testCloudAccountId1,
|
||
|
|
)
|
||
|
|
require.Nil(existingConnected)
|
||
|
|
require.NotNil(apiErr)
|
||
|
|
require.Equal(model.ErrorNotFound, apiErr.Type())
|
||
|
|
|
||
|
|
_, apiErr = controller.CheckInAsAgent(
|
||
|
|
context.TODO(), "aws", AgentCheckInRequest{
|
||
|
|
AccountId: testAccountId2,
|
||
|
|
CloudAccountId: testCloudAccountId1,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
|
||
|
|
// should be able to keep checking in
|
||
|
|
_, apiErr = controller.CheckInAsAgent(
|
||
|
|
context.TODO(), "aws", AgentCheckInRequest{
|
||
|
|
AccountId: testAccountId2,
|
||
|
|
CloudAccountId: testCloudAccountId1,
|
||
|
|
},
|
||
|
|
)
|
||
|
|
require.Nil(apiErr)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestCantDisconnectNonExistentAccount(t *testing.T) {
|
||
|
|
require := require.New(t)
|
||
|
|
testDB, _ := utils.NewTestSqliteDB(t)
|
||
|
|
controller, err := NewController(testDB)
|
||
|
|
require.NoError(err)
|
||
|
|
|
||
|
|
// Attempting to disconnect a non-existent account should return error
|
||
|
|
account, apiErr := controller.DisconnectAccount(
|
||
|
|
context.TODO(), "aws", uuid.NewString(),
|
||
|
|
)
|
||
|
|
require.NotNil(apiErr)
|
||
|
|
require.Equal(model.ErrorNotFound, apiErr.Type())
|
||
|
|
require.Nil(account)
|
||
|
|
}
|