From bdb087578a0b667eae670a94b1e0e3cf635be7e9 Mon Sep 17 00:00:00 2001 From: mihaelabalutoiu Date: Mon, 12 Sep 2022 17:45:34 +0300 Subject: [PATCH] Add `controller.go` unit tests --- database/sql/controller_test.go | 95 +++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 database/sql/controller_test.go diff --git a/database/sql/controller_test.go b/database/sql/controller_test.go new file mode 100644 index 00000000..3542dc82 --- /dev/null +++ b/database/sql/controller_test.go @@ -0,0 +1,95 @@ +// Copyright 2022 Cloudbase Solutions SRL +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may +// not use this file except in compliance with the License. You may obtain +// a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. + +package sql + +import ( + "context" + "fmt" + "garm/config" + dbCommon "garm/database/common" + runnerErrors "garm/errors" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/suite" +) + +var ( + encryptionPassphrase = "bocyasicgatEtenOubwonIbsudNutDom" +) + +func getTestSqliteDBConfig(t *testing.T) config.Database { + dir, err := os.MkdirTemp("", "garm-config-test") + if err != nil { + t.Fatalf("failed to create temporary directory: %s", err) + } + t.Cleanup(func() { os.RemoveAll(dir) }) + + return config.Database{ + Debug: false, + DbBackend: config.SQLiteBackend, + Passphrase: encryptionPassphrase, + SQLite: config.SQLite{ + DBFile: filepath.Join(dir, "garm.db"), + }, + } +} + +type CtrlTestSuite struct { + suite.Suite + Store dbCommon.Store +} + +func (s *CtrlTestSuite) SetupTest() { + db, err := NewSQLDatabase(context.Background(), getTestSqliteDBConfig(s.T())) + if err != nil { + s.FailNow(fmt.Sprintf("failed to create db connection: %s", err)) + } + s.Store = db +} + +func (s *CtrlTestSuite) TestControllerInfo() { + initCtrlInfo, err := s.Store.InitController() + if err != nil { + s.FailNow(fmt.Sprintf("cannot init controller: %v", err)) + } + + ctrlInfo, err := s.Store.ControllerInfo() + + s.Require().Nil(err) + s.Require().Equal(initCtrlInfo.ControllerID, ctrlInfo.ControllerID) +} + +func (s *CtrlTestSuite) TestControllerInfoErrNotFound() { + _, err := s.Store.ControllerInfo() + + s.Require().Regexp("fetching controller info: not found", err.Error()) +} + +func (s *CtrlTestSuite) TestInitControllerAlreadyInitialized() { + _, err := s.Store.InitController() + if err != nil { + s.FailNow(fmt.Sprintf("cannot init controller: %v", err)) + } + + _, err = s.Store.InitController() + + s.Require().Regexp(runnerErrors.NewConflictError("controller already initialized"), err) +} + +func TestCtrlTestSuite(t *testing.T) { + suite.Run(t, new(CtrlTestSuite)) +}