From b9a178e743b4c3497c3c1f3c31316c33e646b951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Leszczy=C5=84ski?= <2000michal@wp.pl> Date: Mon, 16 Dec 2024 12:43:17 +0100 Subject: [PATCH] fix(pkg): init config cache with cluster --- .../backup/service_backup_integration_test.go | 8 ++-- .../repair/service_repair_integration_test.go | 18 ++++---- .../restore/helper_integration_test.go | 12 ++--- .../service_restore_integration_test.go | 6 +-- pkg/testutils/testconfig/testconfig.go | 6 ++- pkg/testutils/testhelper/helper.go | 46 +++++++++++++++++-- 6 files changed, 70 insertions(+), 26 deletions(-) diff --git a/pkg/service/backup/service_backup_integration_test.go b/pkg/service/backup/service_backup_integration_test.go index 5ed5d091c..e9146dca0 100644 --- a/pkg/service/backup/service_backup_integration_test.go +++ b/pkg/service/backup/service_backup_integration_test.go @@ -63,11 +63,11 @@ func newBackupTestHelperWithUser(t *testing.T, session gocqlx.Session, config ba S3InitBucket(t, location.Path) clusterID := uuid.MustRandom() - logger := log.NewDevelopmentWithLevel(zapcore.InfoLevel) + hrt := NewHackableRoundTripper(scyllaclient.DefaultTransport()) client := newTestClient(t, hrt, logger.Named("client"), clientConf) - service := newTestServiceWithUser(t, session, client, config, logger, user, pass) + service := newTestServiceWithUser(t, session, client, config, logger, clusterID, user, pass) cHelper := &CommonTestHelper{ Session: session, Hrt: hrt, @@ -108,7 +108,7 @@ func newTestClient(t *testing.T, hrt *HackableRoundTripper, logger log.Logger, c return c } -func newTestServiceWithUser(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c backup.Config, logger log.Logger, user, pass string) *backup.Service { +func newTestServiceWithUser(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c backup.Config, logger log.Logger, clusterID uuid.UUID, user, pass string) *backup.Service { t.Helper() s, err := backup.NewService( @@ -127,7 +127,7 @@ func newTestServiceWithUser(t *testing.T, session gocqlx.Session, client *scylla } return CreateManagedClusterSession(t, false, client, user, pass), nil }, - NewTestConfigCacheSvc(t, client.Config().Hosts), + NewTestConfigCacheSvc(t, clusterID, client.Config().Hosts), logger.Named("backup"), ) if err != nil { diff --git a/pkg/service/repair/service_repair_integration_test.go b/pkg/service/repair/service_repair_integration_test.go index 51d20a55e..d382ed080 100644 --- a/pkg/service/repair/service_repair_integration_test.go +++ b/pkg/service/repair/service_repair_integration_test.go @@ -60,12 +60,13 @@ type repairTestHelper struct { func newRepairTestHelper(t *testing.T, session gocqlx.Session, config repair.Config) *repairTestHelper { t.Helper() + clusterID := uuid.MustRandom() logger := log.NewDevelopmentWithLevel(zapcore.InfoLevel) hrt := NewHackableRoundTripper(scyllaclient.DefaultTransport()) hrt.SetInterceptor(repairInterceptor(scyllaclient.CommandSuccessful)) c := newTestClient(t, hrt, log.NopLogger) - s := newTestService(t, session, c, config, logger) + s := newTestService(t, session, c, config, logger, clusterID) return &repairTestHelper{ CommonTestHelper: &CommonTestHelper{ @@ -73,7 +74,7 @@ func newRepairTestHelper(t *testing.T, session gocqlx.Session, config repair.Con Session: session, Hrt: hrt, Client: c, - ClusterID: uuid.MustRandom(), + ClusterID: clusterID, TaskID: uuid.MustRandom(), RunID: uuid.NewTime(), T: t, @@ -86,8 +87,9 @@ func newRepairWithClusterSessionTestHelper(t *testing.T, session gocqlx.Session, hrt *HackableRoundTripper, c *scyllaclient.Client, config repair.Config) *repairTestHelper { t.Helper() + clusterID := uuid.MustRandom() logger := log.NewDevelopmentWithLevel(zapcore.InfoLevel) - s := newTestServiceWithClusterSession(t, session, c, config, logger) + s := newTestServiceWithClusterSession(t, session, c, config, logger, clusterID) return &repairTestHelper{ CommonTestHelper: &CommonTestHelper{ @@ -95,7 +97,7 @@ func newRepairWithClusterSessionTestHelper(t *testing.T, session gocqlx.Session, Session: session, Hrt: hrt, Client: c, - ClusterID: uuid.MustRandom(), + ClusterID: clusterID, TaskID: uuid.MustRandom(), RunID: uuid.NewTime(), T: t, @@ -389,7 +391,7 @@ func newTestClient(t *testing.T, hrt *HackableRoundTripper, logger log.Logger) * return c } -func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c repair.Config, logger log.Logger) *repair.Service { +func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c repair.Config, logger log.Logger, clusterID uuid.UUID) *repair.Service { t.Helper() s, err := repair.NewService( @@ -402,7 +404,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return gocqlx.Session{}, errors.New("not implemented") }, - NewTestConfigCacheSvc(t, client.Config().Hosts), + NewTestConfigCacheSvc(t, clusterID, client.Config().Hosts), logger.Named("repair"), ) if err != nil { @@ -412,7 +414,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C return s } -func newTestServiceWithClusterSession(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c repair.Config, logger log.Logger) *repair.Service { +func newTestServiceWithClusterSession(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c repair.Config, logger log.Logger, clusterID uuid.UUID) *repair.Service { t.Helper() s, err := repair.NewService( @@ -425,7 +427,7 @@ func newTestServiceWithClusterSession(t *testing.T, session gocqlx.Session, clie func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateSession(t, client), nil }, - NewTestConfigCacheSvc(t, client.Config().Hosts), + NewTestConfigCacheSvc(t, clusterID, client.Config().Hosts), logger.Named("repair"), ) if err != nil { diff --git a/pkg/service/restore/helper_integration_test.go b/pkg/service/restore/helper_integration_test.go index c4a793478..648e86933 100644 --- a/pkg/service/restore/helper_integration_test.go +++ b/pkg/service/restore/helper_integration_test.go @@ -113,15 +113,15 @@ func newTestHelper(t *testing.T, srcHosts, dstHosts []string) *testHelper { return &testHelper{ srcCluster: srcCluster, - srcBackupSvc: newBackupSvc(t, srcCluster.Session, srcCluster.Client), + srcBackupSvc: newBackupSvc(t, srcCluster.Session, srcCluster.Client, srcCluster.ClusterID), dstCluster: dstCluster, - dstRestoreSvc: newRestoreSvc(t, dstCluster.Session, dstCluster.Client, user, pass), + dstRestoreSvc: newRestoreSvc(t, dstCluster.Session, dstCluster.Client, dstCluster.ClusterID, user, pass), dstUser: user, dstPass: pass, } } -func newBackupSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient.Client) *backup.Service { +func newBackupSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient.Client, clusterID uuid.UUID) *backup.Service { svc, err := backup.NewService( mgrSession, defaultBackupTestConfig(), @@ -135,7 +135,7 @@ func newBackupSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient. func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateSession(t, client), nil }, - NewTestConfigCacheSvc(t, client.Config().Hosts), + NewTestConfigCacheSvc(t, clusterID, client.Config().Hosts), log.NewDevelopmentWithLevel(zapcore.ErrorLevel).Named("backup"), ) if err != nil { @@ -144,8 +144,8 @@ func newBackupSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient. return svc } -func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient.Client, user, pass string) *Service { - configCacheSvc := NewTestConfigCacheSvc(t, client.Config().Hosts) +func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient.Client, clusterID uuid.UUID, user, pass string) *Service { + configCacheSvc := NewTestConfigCacheSvc(t, clusterID, client.Config().Hosts) repairSvc, err := repair.NewService( mgrSession, diff --git a/pkg/service/restore/service_restore_integration_test.go b/pkg/service/restore/service_restore_integration_test.go index 39f8c0449..6b3b6b5c4 100644 --- a/pkg/service/restore/service_restore_integration_test.go +++ b/pkg/service/restore/service_restore_integration_test.go @@ -64,7 +64,7 @@ func newRestoreTestHelper(t *testing.T, session gocqlx.Session, config Config, l logger := log.NewDevelopmentWithLevel(zapcore.InfoLevel) hrt := NewHackableRoundTripper(scyllaclient.DefaultTransport()) client := newTestClient(t, hrt, logger.Named("client"), clientConf) - service, backupSvc := newTestService(t, session, client, config, logger, user, pass) + service, backupSvc := newTestService(t, session, client, config, logger, clusterID, user, pass) cHelper := &CommonTestHelper{ Session: session, Hrt: hrt, @@ -106,10 +106,10 @@ func newTestClient(t *testing.T, hrt *HackableRoundTripper, logger log.Logger, c return c } -func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c Config, logger log.Logger, user, pass string) (*Service, *backup.Service) { +func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c Config, logger log.Logger, clusterID uuid.UUID, user, pass string) (*Service, *backup.Service) { t.Helper() - configCacheSvc := NewTestConfigCacheSvc(t, client.Config().Hosts) + configCacheSvc := NewTestConfigCacheSvc(t, clusterID, client.Config().Hosts) repairSvc, err := repair.NewService( session, diff --git a/pkg/testutils/testconfig/testconfig.go b/pkg/testutils/testconfig/testconfig.go index 040218fdd..81542779e 100644 --- a/pkg/testutils/testconfig/testconfig.go +++ b/pkg/testutils/testconfig/testconfig.go @@ -133,7 +133,11 @@ func ScyllaManagerDBCluster() string { // IsSSLEnabled is a helper function to parse SSL_ENABLED env var. // SSL_ENABLED env var indicates if scylla cluster is configured to use ssl or not. func IsSSLEnabled() bool { - sslEnabled, err := strconv.ParseBool(os.Getenv("SSL_ENABLED")) + raw := os.Getenv("SSL_ENABLED") + if raw == "" { + return false + } + sslEnabled, err := strconv.ParseBool(raw) if err != nil { panic("parse SSL_ENABLED env var:" + err.Error()) } diff --git a/pkg/testutils/testhelper/helper.go b/pkg/testutils/testhelper/helper.go index 01a2b115d..80c7af004 100644 --- a/pkg/testutils/testhelper/helper.go +++ b/pkg/testutils/testhelper/helper.go @@ -4,6 +4,7 @@ package testhelper import ( "context" + "os" "testing" "time" @@ -12,13 +13,13 @@ import ( "github.com/scylladb/scylla-manager/v3/pkg/config/server" "github.com/scylladb/scylla-manager/v3/pkg/metrics" "github.com/scylladb/scylla-manager/v3/pkg/schema/table" + "github.com/scylladb/scylla-manager/v3/pkg/scyllaclient" "github.com/scylladb/scylla-manager/v3/pkg/service/cluster" "github.com/scylladb/scylla-manager/v3/pkg/service/configcache" "github.com/scylladb/scylla-manager/v3/pkg/store" - - "github.com/scylladb/scylla-manager/v3/pkg/scyllaclient" . "github.com/scylladb/scylla-manager/v3/pkg/testutils" . "github.com/scylladb/scylla-manager/v3/pkg/testutils/db" + "github.com/scylladb/scylla-manager/v3/pkg/testutils/testconfig" "github.com/scylladb/scylla-manager/v3/pkg/util/uuid" ) @@ -76,7 +77,7 @@ func execOnAllHosts(h *CommonTestHelper, cmd string) { // NewTestConfigCacheSvc creates default config cache service which can be used // for testing other services relaying on it. -func NewTestConfigCacheSvc(t *testing.T, hosts []string) configcache.ConfigCacher { +func NewTestConfigCacheSvc(t *testing.T, clusterID uuid.UUID, hosts []string) configcache.ConfigCacher { t.Helper() session := CreateScyllaManagerDBSession(t) @@ -87,6 +88,10 @@ func NewTestConfigCacheSvc(t *testing.T, hosts []string) configcache.ConfigCache if err != nil { t.Fatal(err) } + err = clusterSvc.PutCluster(context.Background(), ValidCluster(t, clusterID, hosts[0])) + if err != nil { + t.Fatal(err) + } scyllaClientProvider := func(context.Context, uuid.UUID) (*scyllaclient.Client, error) { sc := scyllaclient.TestConfig(hosts, AgentAuthToken()) @@ -95,5 +100,38 @@ func NewTestConfigCacheSvc(t *testing.T, hosts []string) configcache.ConfigCache return scyllaclient.NewClient(sc, log.NewDevelopment()) } - return configcache.NewService(configcache.DefaultConfig(), clusterSvc, scyllaClientProvider, secretsStore, log.NewDevelopment()) + svc := configcache.NewService(configcache.DefaultConfig(), clusterSvc, scyllaClientProvider, secretsStore, log.NewDevelopment()) + svc.Init(context.Background()) + return svc +} + +// ValidCluster return Cluster initialized according to test configuration. +func ValidCluster(t *testing.T, id uuid.UUID, host string) *cluster.Cluster { + t.Helper() + + c := &cluster.Cluster{ + ID: id, + Name: "name_" + id.String(), + Host: host, + Port: 10001, + AuthToken: AgentAuthToken(), + Username: testconfig.TestDBUsername(), + Password: testconfig.TestDBPassword(), + } + + if testconfig.IsSSLEnabled() { + sslOpts := testconfig.CQLSSLOptions() + userKey, err := os.ReadFile(sslOpts.KeyPath) + if err != nil { + t.Fatalf("read file (%s) err: %v", sslOpts.KeyPath, err) + } + userCrt, err := os.ReadFile(sslOpts.CertPath) + if err != nil { + t.Fatalf("read file (%s) err: %v", sslOpts.CertPath, err) + } + c.SSLUserKeyFile = userKey + c.SSLUserCertFile = userCrt + } + + return c }