Skip to content

Commit 5b34781

Browse files
Merge pull request #85 from oracle-samples/test_code_coverage
Add more code coverage tests
2 parents 1d79345 + cab9702 commit 5b34781

File tree

4 files changed

+109
-15
lines changed

4 files changed

+109
-15
lines changed

tests/connection_pool_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import (
4646
"testing"
4747
"time"
4848

49+
"github.com/oracle-samples/gorm-oracle/oracle"
4950
"gorm.io/gorm"
5051
)
5152

@@ -589,3 +590,36 @@ func TestConnectionPoolStats(t *testing.T) {
589590
t.Error("Idle connections should not be negative")
590591
}
591592
}
593+
594+
func TestGormOpenWithExistingConn(t *testing.T) {
595+
sqlDB, err := DB.DB()
596+
if err != nil {
597+
t.Fatalf("Failed to get underlying DB: %v", err)
598+
}
599+
600+
sqlDB.SetMaxOpenConns(10)
601+
sqlDB.SetMaxIdleConns(5)
602+
sqlDB.SetConnMaxLifetime(30 * time.Minute)
603+
sqlDB.SetConnMaxIdleTime(5 * time.Minute)
604+
605+
config := oracle.Config{
606+
Conn: sqlDB,
607+
}
608+
609+
dialector := oracle.New(config)
610+
611+
newDB, err := gorm.Open(dialector, &gorm.Config{})
612+
if err != nil {
613+
panic(err)
614+
}
615+
616+
underlyingDB, err := newDB.DB()
617+
if err != nil {
618+
panic(err)
619+
}
620+
621+
stats := underlyingDB.Stats()
622+
if stats.MaxOpenConnections != 10 {
623+
t.Errorf("Expected MaxOpenConnections: 10, got: %d", stats.MaxOpenConnections)
624+
}
625+
}

tests/info.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func GormInfo() {
8383
// Get ORACLE DATABASE VERSION
8484
var banner, bannerFull, bannerLegacy string
8585
var conID int
86-
err = sqlDB.QueryRow(`SELECT BANNER, BANNER_FULL, BANNER_LEGACY, CON_ID FROM v$version WHERE banner LIKE 'Oracle Database%'`).Scan(&banner, &bannerFull, &bannerLegacy, &conID)
86+
err = sqlDB.QueryRow(`SELECT BANNER, BANNER_FULL, BANNER_LEGACY, CON_ID FROM v$version WHERE banner LIKE 'Oracle % Database%'`).Scan(&banner, &bannerFull, &bannerLegacy, &conID)
8787
if err != nil {
8888
fmt.Printf("Failed to get Oracle DB version: %v\n", err)
8989
} else {
@@ -115,5 +115,7 @@ func GormInfo() {
115115
fmt.Printf("Oracle Client library version : %s\n", clientVersion2)
116116
}
117117

118+
fmt.Printf("CurrentDatabase : %s\n", db.Migrator().CurrentDatabase())
119+
118120
fmt.Printf("==========================================\n\n")
119121
}

tests/migrate_test.go

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,19 @@ func TestMigrateWithUniqueIndex(t *testing.T) {
359359
if !DB.Migrator().HasIndex(&UserWithUniqueIndex{}, "idx_user_with_unique_indices_u_name") {
360360
t.Errorf("Failed to find created index")
361361
}
362+
363+
type IndexWithOption struct {
364+
ID int
365+
Name string `gorm:"size:20;index:idx_name_opt,unique,option:TABLESPACE SYSAUX NOPARALLEL"`
366+
}
367+
DB.Migrator().DropTable(&IndexWithOption{})
368+
if err := DB.AutoMigrate(&IndexWithOption{}); err != nil {
369+
t.Fatalf("failed to migrate, got %v", err)
370+
}
371+
372+
if !DB.Migrator().HasIndex(&IndexWithOption{}, "idx_name_opt") {
373+
t.Errorf("Failed to find created index")
374+
}
362375
}
363376

364377
func TestMigrateTable(t *testing.T) {
@@ -536,47 +549,52 @@ func TestMigrateColumns(t *testing.T) {
536549
}
537550
}
538551
}
552+
}
539553

540-
type NewColumnStruct struct {
554+
func TestMigrateAddDropColumns(t *testing.T) {
555+
type MigrateAddDropColumns struct {
541556
gorm.Model
542557
Name string
543558
NewName string
544559
}
545560

546-
if err := DB.Table("column_structs").Migrator().AddColumn(&NewColumnStruct{}, "NewName"); err != nil {
547-
t.Fatalf("Failed to add column, got %v", err)
548-
}
561+
DB.Migrator().DropTable(&MigrateAddDropColumns{})
562+
DB.AutoMigrate(&MigrateAddDropColumns{})
549563

550-
if !DB.Table("column_structs").Migrator().HasColumn(&NewColumnStruct{}, "NewName") {
551-
t.Fatalf("Failed to find added column")
564+
if err := DB.Table("migrate_add_drop_columns").Migrator().AddColumn(&MigrateAddDropColumns{}, "NewName"); err == nil {
565+
t.Fatalf("Should fail to add column with existing name")
552566
}
553567

554-
if err := DB.Table("column_structs").Migrator().DropColumn(&NewColumnStruct{}, "NewName"); err != nil {
555-
t.Fatalf("Failed to add column, got %v", err)
568+
if err := DB.Table("migrate_add_drop_columns").Migrator().DropColumn(&MigrateAddDropColumns{}, "NewName"); err != nil {
569+
t.Fatalf("Failed to drop column, got %v", err)
556570
}
557571

558-
if DB.Table("column_structs").Migrator().HasColumn(&NewColumnStruct{}, "NewName") {
572+
if DB.Table("migrate_add_drop_columns").Migrator().HasColumn(&MigrateAddDropColumns{}, "NewName") {
559573
t.Fatalf("Found deleted column")
560574
}
561575

562-
if err := DB.Table("column_structs").Migrator().AddColumn(&NewColumnStruct{}, "NewName"); err != nil {
576+
if err := DB.Table("migrate_add_drop_columns").Migrator().AddColumn(&MigrateAddDropColumns{}, "NewName"); err != nil {
563577
t.Fatalf("Failed to add column, got %v", err)
564578
}
565579

566-
if err := DB.Table("column_structs").Migrator().RenameColumn(&NewColumnStruct{}, "NewName",
580+
if err := DB.Table("migrate_add_drop_columns").Migrator().RenameColumn(&MigrateAddDropColumns{}, "NewName",
567581
"new_new_name"); err != nil {
568582
t.Fatalf("Failed to add column, got %v", err)
569583
}
570584

571-
if !DB.Table("column_structs").Migrator().HasColumn(&NewColumnStruct{}, "new_new_name") {
585+
if !DB.Table("migrate_add_drop_columns").Migrator().HasColumn(&MigrateAddDropColumns{}, "new_new_name") {
572586
t.Fatalf("Failed to found renamed column")
573587
}
574588

575-
if err := DB.Table("column_structs").Migrator().DropColumn(&NewColumnStruct{}, "new_new_name"); err != nil {
589+
if DB.Table("migrate_add_drop_columns").Migrator().HasColumn(&MigrateAddDropColumns{}, "NewName") {
590+
t.Fatalf("Found renamed column")
591+
}
592+
593+
if err := DB.Table("migrate_add_drop_columns").Migrator().DropColumn(&MigrateAddDropColumns{}, "new_new_name"); err != nil {
576594
t.Fatalf("Failed to add column, got %v", err)
577595
}
578596

579-
if DB.Table("column_structs").Migrator().HasColumn(&NewColumnStruct{}, "new_new_name") {
597+
if DB.Table("migrate_add_drop_columns").Migrator().HasColumn(&MigrateAddDropColumns{}, "new_new_name") {
580598
t.Fatalf("Found deleted column")
581599
}
582600
}
@@ -2073,6 +2091,17 @@ func TestOracleErrorHandling(t *testing.T) {
20732091
if err := DB.AutoMigrate(&TestModel{}); err != nil {
20742092
t.Fatalf("Duplicate table creation should not error: %v", err)
20752093
}
2094+
2095+
type NotAModel struct{}
2096+
if err := DB.Migrator().CreateTable(NotAModel{}); err == nil {
2097+
t.Fatalf("table creation with empty struct shoud report error: %v", err)
2098+
}
2099+
2100+
err := DB.Migrator().CreateTable("not_a_model_name")
2101+
if err != nil && err.Error() != "failed to get schema" {
2102+
t.Fatalf("Expect 'failed to get schema', but got : %v", err)
2103+
}
2104+
20762105
}
20772106

20782107
func TestMigrateOnUpdateConstraint(t *testing.T) {

tests/sql_builder_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,19 @@ func TestToSQL(t *testing.T) {
829829
})
830830
assertEqualSQL(t, `INSERT INTO "users" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") VALUES ('2021-10-18 00:00:00','2021-10-18 00:00:00',NULL,'foo',20,NULL,NULL,NULL,false) RETURNING "id" INTO .*`, sql)
831831

832+
// insert with explicit Table via clause.Insert
833+
user = &User{Name: "bar", Age: 42}
834+
user.CreatedAt = date
835+
user.UpdatedAt = date
836+
sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB {
837+
return tx.Clauses(clause.Insert{Table: clause.Table{Name: "custom_table"}}).Create(user)
838+
})
839+
assertEqualSQL(t, `INSERT INTO "custom_table" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") VALUES ('2021-10-18 00:00:00','2021-10-18 00:00:00',NULL,'bar',42,NULL,NULL,NULL,false) RETURNING "id" INTO .*`, sql)
840+
sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB {
841+
return tx.Clauses(clause.Insert{Table: clause.Table{Name: "custom_table"}}).Unscoped().Create(user)
842+
})
843+
assertEqualSQL(t, `INSERT INTO "custom_table" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") VALUES ('2021-10-18 00:00:00','2021-10-18 00:00:00',NULL,'bar',42,NULL,NULL,NULL,false) RETURNING "id" INTO .*`, sql)
844+
832845
// updates
833846
user = &User{Name: "bar", Age: 22}
834847
user.CreatedAt = date
@@ -838,6 +851,22 @@ func TestToSQL(t *testing.T) {
838851
})
839852
assertEqualSQL(t, `UPDATE "users" SET "created_at"='2021-10-18 00:00:00',"updated_at"='2021-10-18 19:50:09.438',"name"='bar',"age"=22 WHERE id = 100 AND "users"."deleted_at" IS NULL`, sql)
840853

854+
// UPDATE with explicit Table via clause.Update
855+
sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB {
856+
return tx.Clauses(clause.Update{Table: clause.Table{Name: "custom_update_table"}}).Unscoped().
857+
Where("id = ?", 200).
858+
Updates(&User{Name: "patched", Age: 99})
859+
})
860+
assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200`, sql)
861+
862+
// https://github.com/oracle-samples/gorm-oracle/issues/81
863+
// sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB {
864+
// return tx.Clauses(clause.Update{Table: clause.Table{Name: "custom_update_table"}}).
865+
// Where("id = ?", 200).
866+
// Updates(&User{Name: "patched", Age: 99})
867+
// })
868+
// assertEqualSQL(t, `UPDATE "custom_update_table" SET "updated_at"=?,"name"='patched',"age"=99 WHERE id = 200 AND "custom_update_table"."deleted_at" IS NULL`, sql)
869+
841870
// update
842871
sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB {
843872
return tx.Model(&User{}).Where("id = ?", 100).Update("name", "Foo bar")

0 commit comments

Comments
 (0)