Skip to content

Commit 33090a2

Browse files
fix: check if db still exists where needed (#10)
Co-authored-by: Anbraten <[email protected]>
1 parent fe643c8 commit 33090a2

8 files changed

+94
-5
lines changed

adapters/couchdb_adapter.go

+8
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ func (adapter couchdbAdapter) DeleteDatabase(ctx context.Context, database strin
2929
}
3030

3131
func (adapter couchdbAdapter) HasDatabaseUserWithAccess(ctx context.Context, database string, username string) (bool, error) {
32+
dbExists, dbExistsErr := adapter.HasDatabase(ctx, database)
33+
if dbExistsErr != nil {
34+
return false, dbExistsErr
35+
}
36+
if !dbExists {
37+
return false, nil
38+
}
39+
3240
sc, err := adapter.db.DB(database).Security(ctx)
3341
if err != nil {
3442
return false, err

adapters/couchdb_adapter_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/go-kivik/kivik/v4"
1010
)
1111

12-
func TestCouchDB(t *testing.T) {
12+
func prepareCouchDB(t *testing.T) (context.Context, adapters.DatabaseAdapter, ClientConnectTest) {
1313
databaseHost := "localhost"
1414
databasePort := "5984"
1515

@@ -32,5 +32,17 @@ func TestCouchDB(t *testing.T) {
3232
return err
3333
}
3434

35+
return ctx, adapter, clientConnectTest
36+
}
37+
38+
func TestCouchDB(t *testing.T) {
39+
ctx, adapter, clientConnectTest := prepareCouchDB(t)
40+
3541
testHelper(t, ctx, adapter, clientConnectTest)
3642
}
43+
44+
func TestCouchDBCleanup(t *testing.T) {
45+
ctx, adapter, _ := prepareCouchDB(t)
46+
47+
cleanupTestHelper(t, ctx, adapter)
48+
}

adapters/mongo_adapter_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
"go.mongodb.org/mongo-driver/mongo/options"
1111
)
1212

13-
func TestMongoDB(t *testing.T) {
13+
func prepareMongoDB(t *testing.T) (context.Context, adapters.DatabaseAdapter, ClientConnectTest) {
1414
databaseHost := "localhost"
1515
databasePort := "27017"
1616

@@ -34,5 +34,17 @@ func TestMongoDB(t *testing.T) {
3434
return err
3535
}
3636

37+
return ctx, adapter, clientConnectTest
38+
}
39+
40+
func TestMongoDB(t *testing.T) {
41+
ctx, adapter, clientConnectTest := prepareMongoDB(t)
42+
3743
testHelper(t, ctx, adapter, clientConnectTest)
3844
}
45+
46+
func TestMongoDBCleanup(t *testing.T) {
47+
ctx, adapter, _ := prepareMongoDB(t)
48+
49+
cleanupTestHelper(t, ctx, adapter)
50+
}

adapters/mssql_adapter.go

+8
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ func (adapter mssqlAdapter) DeleteDatabase(ctx context.Context, database string)
4141
}
4242

4343
func (adapter mssqlAdapter) HasDatabaseUserWithAccess(ctx context.Context, database string, username string) (bool, error) {
44+
dbExists, dbExistsErr := adapter.HasDatabase(ctx, database)
45+
if dbExistsErr != nil {
46+
return false, dbExistsErr
47+
}
48+
if !dbExists {
49+
return false, nil
50+
}
51+
4452
var count int
4553
query := fmt.Sprintf("USE [%s]; SELECT COUNT(*) FROM sys.database_principals WHERE authentication_type=2 AND name='%s';", database, username)
4654
err := adapter.db.QueryRowContext(ctx, query).Scan(&count)

adapters/mssql_adapter_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/anbraten/k8s-external-database-operator/adapters"
1010
)
1111

12-
func TestMsSqlDB(t *testing.T) {
12+
func prepareMsSqlDB(t *testing.T) (context.Context, adapters.DatabaseAdapter, ClientConnectTest) {
1313
databaseHost := "localhost"
1414
databasePort := "1433"
1515

@@ -32,5 +32,17 @@ func TestMsSqlDB(t *testing.T) {
3232
return err
3333
}
3434

35+
return ctx, adapter, clientConnectTest
36+
}
37+
38+
func TestMsSqlDB(t *testing.T) {
39+
ctx, adapter, clientConnectTest := prepareMsSqlDB(t)
40+
3541
testHelper(t, ctx, adapter, clientConnectTest)
3642
}
43+
44+
func TestMsSqlDBCleanup(t *testing.T) {
45+
ctx, adapter, _ := prepareMsSqlDB(t)
46+
47+
cleanupTestHelper(t, ctx, adapter)
48+
}

adapters/mysql_adapter_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/anbraten/k8s-external-database-operator/adapters"
1010
)
1111

12-
func TestMySqlDB(t *testing.T) {
12+
func prepareMySqlDB(t *testing.T) (context.Context, adapters.DatabaseAdapter, ClientConnectTest) {
1313
databaseHost := "localhost"
1414
databasePort := "3306"
1515

@@ -32,5 +32,17 @@ func TestMySqlDB(t *testing.T) {
3232
return err
3333
}
3434

35+
return ctx, adapter, clientConnectTest
36+
}
37+
38+
func TestMySqlDB(t *testing.T) {
39+
ctx, adapter, clientConnectTest := prepareMySqlDB(t)
40+
3541
testHelper(t, ctx, adapter, clientConnectTest)
3642
}
43+
44+
func TestMySqlDBCleanup(t *testing.T) {
45+
ctx, adapter, _ := prepareMySqlDB(t)
46+
47+
cleanupTestHelper(t, ctx, adapter)
48+
}

adapters/postgres_adapter_test.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/jackc/pgx/v4"
1010
)
1111

12-
func TestPostgresDB(t *testing.T) {
12+
func preparePostgresDB(t *testing.T) (context.Context, adapters.DatabaseAdapter, ClientConnectTest) {
1313
databaseHost := "localhost"
1414
databasePort := "5432"
1515

@@ -32,5 +32,17 @@ func TestPostgresDB(t *testing.T) {
3232
return err
3333
}
3434

35+
return ctx, adapter, clientConnectTest
36+
}
37+
38+
func TestPostgresDB(t *testing.T) {
39+
ctx, adapter, clientConnectTest := preparePostgresDB(t)
40+
3541
testHelper(t, ctx, adapter, clientConnectTest)
3642
}
43+
44+
func TestPostgresDBCleanup(t *testing.T) {
45+
ctx, adapter, _ := preparePostgresDB(t)
46+
47+
cleanupTestHelper(t, ctx, adapter)
48+
}

adapters/utils_test.go

+13
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,16 @@ func testHelper(t *testing.T, ctx context.Context, adapter adapters.DatabaseAdap
6060
t.Fatalf("Database user does not exists")
6161
}
6262
}
63+
64+
func cleanupTestHelper(t *testing.T, ctx context.Context, adapter adapters.DatabaseAdapter) {
65+
result, err := adapter.HasDatabaseUserWithAccess(ctx, "non-existing-db", "non-existing-user")
66+
if err != nil {
67+
t.Fatalf("Checking for existing database user failed: %s", err)
68+
}
69+
if result {
70+
t.Fatalf("database and user existing but expecting to be non-existing")
71+
}
72+
73+
// TODO: test db.DeleteDatabaseUser
74+
// TODO: test db.DeleteDatabase
75+
}

0 commit comments

Comments
 (0)