Files
paralus/pkg/service/cluster_test.go
2022-04-08 17:42:26 +05:30

205 lines
6.5 KiB
Go

package service
import (
"context"
"fmt"
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/RafayLabs/rcloud-base/pkg/common"
"github.com/RafayLabs/rcloud-base/pkg/query"
commonv3 "github.com/RafayLabs/rcloud-base/proto/types/commonpb/v3"
v3 "github.com/RafayLabs/rcloud-base/proto/types/commonpb/v3"
infrav3 "github.com/RafayLabs/rcloud-base/proto/types/infrapb/v3"
"github.com/google/uuid"
)
func performClusterBasicChecks(t *testing.T, cluster *infrav3.Cluster, puuid string) {
if cluster.GetMetadata().GetName() != "cluster-"+puuid {
t.Error("invalid name returned")
}
}
func TestCreateCluster(t *testing.T) {
db, mock := getDB(t)
defer db.Close()
downloadData := &common.DownloadData{
ControlAddr: "localhost:5002",
APIAddr: "localhost:8000",
RelayAgentImage: "rafaysystems/relay:latest",
}
ps := NewClusterService(db, downloadData, NewBootstrapService(db), getLogger())
puuid := uuid.New().String()
cuuid := uuid.New().String()
mock.ExpectQuery(`SELECT "project"."id", "project"."name"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(puuid, "project-"+puuid))
mock.ExpectQuery(`SELECT "cluster"."id", "cluster"."organization_id"`).
WithArgs().WillReturnError(fmt.Errorf("sql: no rows in result set"))
mock.ExpectBegin()
mock.ExpectQuery(`INSERT INTO "cluster_tokens"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
mock.ExpectQuery(`INSERT INTO "cluster_clusters"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
mock.ExpectExec(`UPDATE "cluster_clusters"`).
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectExec(`INSERT INTO "cluster_project_cluster"`).
WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit()
cluster := &infrav3.Cluster{
Metadata: &v3.Metadata{Id: cuuid, Name: "cluster-" + cuuid, Organization: "orgname", Project: "project-" + puuid},
Spec: &infrav3.ClusterSpec{
ClusterType: "imported",
},
}
cluster, err := ps.Create(context.Background(), cluster)
if err != nil {
t.Fatal("could not create cluster:", err)
}
performClusterBasicChecks(t, cluster, cuuid)
}
func TestUpdateCluster(t *testing.T) {
db, mock := getDB(t)
defer db.Close()
downloadData := &common.DownloadData{
ControlAddr: "localhost:5002",
APIAddr: "localhost:8000",
RelayAgentImage: "rafaysystems/relay:latest",
}
ps := NewClusterService(db, downloadData, NewBootstrapService(db), getLogger())
puuid := uuid.New().String()
cuuid := uuid.New().String()
mock.ExpectQuery(`SELECT "cluster"."id", "cluster"."organization_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
mock.ExpectExec(`UPDATE "cluster_clusters"`).
WillReturnResult(sqlmock.NewResult(1, 1))
cluster := &infrav3.Cluster{
Metadata: &v3.Metadata{Id: cuuid, Name: "cluster-" + cuuid, Organization: "orgname", Project: "project-" + puuid},
Spec: &infrav3.ClusterSpec{
ClusterType: "imported",
},
}
cluster, err := ps.Update(context.Background(), cluster)
if err != nil {
t.Fatal("could not update cluster:", err)
}
performClusterBasicChecks(t, cluster, cuuid)
}
func TestSelectCluster(t *testing.T) {
db, mock := getDB(t)
defer db.Close()
downloadData := &common.DownloadData{
ControlAddr: "localhost:5002",
APIAddr: "localhost:8000",
RelayAgentImage: "rafaysystems/relay:latest",
}
ps := NewClusterService(db, downloadData, NewBootstrapService(db), getLogger())
puuid := uuid.New().String()
cuuid := uuid.New().String()
mock.ExpectQuery(`SELECT "cluster"."id", "cluster"."organization_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
mock.ExpectQuery(`SELECT "projectcluster"."cluster_id", "projectcluster"."project_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
cluster := &infrav3.Cluster{
Metadata: &v3.Metadata{Id: cuuid, Name: "cluster-" + cuuid, Organization: "orgname", Project: "project-" + puuid},
Spec: &infrav3.ClusterSpec{
ClusterType: "imported",
},
}
cluster, err := ps.Select(context.Background(), cluster, false)
if err != nil {
t.Fatal("could not fetch cluster:", err)
}
performClusterBasicChecks(t, cluster, cuuid)
}
func TestGetCluster(t *testing.T) {
db, mock := getDB(t)
defer db.Close()
downloadData := &common.DownloadData{
ControlAddr: "localhost:5002",
APIAddr: "localhost:8000",
RelayAgentImage: "rafaysystems/relay:latest",
}
ps := NewClusterService(db, downloadData, NewBootstrapService(db), getLogger())
puuid := uuid.New().String()
cuuid := uuid.New().String()
mock.ExpectQuery(`SELECT "cluster"."id", "cluster"."organization_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
mock.ExpectQuery(`SELECT "projectcluster"."cluster_id", "projectcluster"."project_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id"}).AddRow(cuuid))
qo := commonv3.QueryOptions{
ClusterID: cuuid,
Name: "cluster-" + cuuid,
Project: puuid,
}
cluster, err := ps.Get(context.Background(), query.WithOptions(&qo))
if err != nil {
t.Fatal("could not fetch cluster:", err)
}
performClusterBasicChecks(t, cluster, cuuid)
}
func TestListCluster(t *testing.T) {
db, mock := getDB(t)
defer db.Close()
downloadData := &common.DownloadData{
ControlAddr: "localhost:5002",
APIAddr: "localhost:8000",
RelayAgentImage: "rafaysystems/relay:latest",
}
ps := NewClusterService(db, downloadData, NewBootstrapService(db), getLogger())
puuid := uuid.New().String()
ouuid := uuid.New().String()
pruuid := uuid.New().String()
cuuid := uuid.New().String()
mock.ExpectQuery(`SELECT "project"."id", "project"."name"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id", "organization_id", "partner_id"}).AddRow(cuuid, ouuid, puuid))
mock.ExpectQuery(`SELECT "cluster"."id", "cluster"."organization_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id", "organization_id", "partner_id"}).AddRow(cuuid, ouuid, puuid))
mock.ExpectQuery(`SELECT "projectcluster"."project_id", "projectcluster"."cluster_id"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"cluster_id", "project_id"}).AddRow(cuuid, puuid))
mock.ExpectQuery(`SELECT "partner"."id", "partner"."name"`).
WithArgs().WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(puuid, "partner-"+puuid))
qo := commonv3.QueryOptions{
Project: pruuid,
}
_, err := ps.List(context.Background(), query.WithOptions(&qo))
if err != nil {
t.Fatal("could not fetch cluster:", err)
}
}