From 6e15fe13f61a7036ebb47af533f7d5d1658ce0c0 Mon Sep 17 00:00:00 2001 From: Harshit Date: Thu, 14 Aug 2025 06:35:15 +0000 Subject: [PATCH 1/6] Add tests for Insert query --- tests/main_test.go | 35 +++++++++++++++++++++++++++++++++++ tests/passed-tests.txt | 1 + 2 files changed, 36 insertions(+) diff --git a/tests/main_test.go b/tests/main_test.go index 9d9c280..7fa09a4 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -41,6 +41,7 @@ package tests import ( "fmt" "testing" + "time" . "github.com/oracle-samples/gorm-oracle/tests/utils" ) @@ -90,3 +91,37 @@ func TestSetAndGet(t *testing.T) { t.Errorf("Get non existing key should return error") } } + +func TestInsertScenarios(t *testing.T) { + if err := DB.Migrator().DropTable(&User{}); err != nil { + t.Fatalf("Failed to drop table: %v", err) + } + if err := DB.AutoMigrate(&User{}); err != nil { + t.Fatalf("Failed to migrate table: %v", err) + } + + user1 := User{Name: "Alice", Age: 30} + if err := DB.Create(&user1).Error; err != nil { + t.Errorf("Basic insert failed: %v", err) + } + + user2 := User{Name: "Bob"} + if err := DB.Create(&user2).Error; err != nil { + t.Errorf("Insert with NULL failed: %v", err) + } + + user3 := User{Name: "O'Reilly", Age: 45} + if err := DB.Create(&user3).Error; err != nil { + t.Errorf("Insert with special characters failed: %v", err) + } + + type UserWithTime struct { + ID uint + Name string + CreatedAt time.Time + } + user4 := User{Name: "Charlie"} + if err := DB.Create(&user4).Error; err != nil { + t.Errorf("Insert with default timestamp failed: %v", err) + } +} diff --git a/tests/passed-tests.txt b/tests/passed-tests.txt index 8c9af2d..91bec2c 100644 --- a/tests/passed-tests.txt +++ b/tests/passed-tests.txt @@ -379,3 +379,4 @@ BenchmarkScanSlice BenchmarkScanSlicePointer BenchmarkUpdate BenchmarkDelete +TestInsertScenarios From 1d333bb3e14733c54aa902677f418d74cc5dcc9e Mon Sep 17 00:00:00 2001 From: Harshit Date: Thu, 14 Aug 2025 06:56:06 +0000 Subject: [PATCH 2/6] Fix test issues for TestInsertScenarios --- tests/main_test.go | 29 ++++++++++++++++++++--------- tests/run-tests.sh | 18 +++--------------- tests/tests_test.go | 29 +++-------------------------- 3 files changed, 26 insertions(+), 50 deletions(-) diff --git a/tests/main_test.go b/tests/main_test.go index 7fa09a4..e499717 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -93,34 +93,45 @@ func TestSetAndGet(t *testing.T) { } func TestInsertScenarios(t *testing.T) { - if err := DB.Migrator().DropTable(&User{}); err != nil { + type UserWithAge struct { + ID uint `gorm:"column:ID;primaryKey"` + Name string `gorm:"column:NAME"` + Age int `gorm:"column:AGE"` + } + + if err := DB.Migrator().DropTable(&UserWithAge{}); err != nil { t.Fatalf("Failed to drop table: %v", err) } - if err := DB.AutoMigrate(&User{}); err != nil { + if err := DB.AutoMigrate(&UserWithAge{}); err != nil { t.Fatalf("Failed to migrate table: %v", err) } - user1 := User{Name: "Alice", Age: 30} + user1 := UserWithAge{Name: "Alice", Age: 30} if err := DB.Create(&user1).Error; err != nil { t.Errorf("Basic insert failed: %v", err) } - user2 := User{Name: "Bob"} + user2 := UserWithAge{Name: "Bob"} if err := DB.Create(&user2).Error; err != nil { t.Errorf("Insert with NULL failed: %v", err) } - user3 := User{Name: "O'Reilly", Age: 45} + user3 := UserWithAge{Name: "O'Reilly", Age: 45} if err := DB.Create(&user3).Error; err != nil { t.Errorf("Insert with special characters failed: %v", err) } type UserWithTime struct { - ID uint - Name string - CreatedAt time.Time + ID uint `gorm:"column:ID;primaryKey"` + Name string `gorm:"column:NAME"` + CreatedAt time.Time `gorm:"column:CREATED_AT"` } - user4 := User{Name: "Charlie"} + + if err := DB.AutoMigrate(&UserWithTime{}); err != nil { + t.Fatalf("Failed to migrate UserWithTime table: %v", err) + } + + user4 := UserWithTime{Name: "Charlie"} if err := DB.Create(&user4).Error; err != nil { t.Errorf("Insert with default timestamp failed: %v", err) } diff --git a/tests/run-tests.sh b/tests/run-tests.sh index 3b6b54c..a237691 100755 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -10,21 +10,9 @@ # 2. Run the script ./run_tests.sh # Check for required Oracle environment variables -missing_vars=() -for var in GORM_ORACLEDB_USER GORM_ORACLEDB_PASSWORD GORM_ORACLEDB_CONNECTSTRING GORM_ORACLEDB_LIBDIR; do - if [ -z "${!var}" ]; then - missing_vars+=("$var") - fi -done -if [ ${#missing_vars[@]} -ne 0 ]; then - echo "Error: The following environment variables must be set to run the tests: ${missing_vars[*]}" - echo "Example:" - echo " export GORM_ORACLEDB_USER=your_user" - echo " export GORM_ORACLEDB_PASSWORD=your_password" - echo " export GORM_ORACLEDB_CONNECTSTRING=your_connect_string" - echo " export GORM_ORACLEDB_LIBDIR=your_lib_dir" - exit 1 -fi +export GORM_DSN='user="system" password="manager" \ +connectString="phoenix793630.dev3sub1phx.databasede3phx.oraclevcn.com:1661/cdb1_pdb1.regress.rdbms.dev.us.oracle.com" \ +libDir="/home/hkhasnis/projects/pkgs/23IC"' # Check if passed-tests.txt exists if [ ! -f "passed-tests.txt" ]; then diff --git a/tests/tests_test.go b/tests/tests_test.go index 2842c83..af06ae3 100644 --- a/tests/tests_test.go +++ b/tests/tests_test.go @@ -65,32 +65,9 @@ var newLogger = logger.New( }, ) -var oracleDSN = func() string { - user := os.Getenv("GORM_ORACLEDB_USER") - password := os.Getenv("GORM_ORACLEDB_PASSWORD") - connectString := os.Getenv("GORM_ORACLEDB_CONNECTSTRING") - libDir := os.Getenv("GORM_ORACLEDB_LIBDIR") - - missing := []string{} - if user == "" { - missing = append(missing, "GORM_ORACLEDB_USER") - } - if password == "" { - missing = append(missing, "GORM_ORACLEDB_PASSWORD") - } - if connectString == "" { - missing = append(missing, "GORM_ORACLEDB_CONNECTSTRING") - } - if libDir == "" { - missing = append(missing, "GORM_ORACLEDB_LIBDIR") - } - if len(missing) > 0 { - log.Fatalf("Missing required environment variables: %v. Please set them to run the tests.", missing) - } - return `user="` + user + `" password="` + password + `" - connectString="` + connectString + `" - libDir="` + libDir + `"` -}() +var oracleDSN = `user="system" password="manager" + connectString="phoenix793630.dev3sub1phx.databasede3phx.oraclevcn.com:1661/cdb1_pdb1.regress.rdbms.dev.us.oracle.com" + libDir="/home/hkhasnis/projects/pkgs/23IC"` func init() { var err error From 17073cbf86bb722dfc18946d40a4b4c1f1871440 Mon Sep 17 00:00:00 2001 From: Harshit Date: Thu, 14 Aug 2025 06:57:45 +0000 Subject: [PATCH 3/6] Remove hard coded DB connection values --- tests/run-tests.sh | 18 +++++++++++++++--- tests/tests_test.go | 29 ++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/tests/run-tests.sh b/tests/run-tests.sh index a237691..3b6b54c 100755 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -10,9 +10,21 @@ # 2. Run the script ./run_tests.sh # Check for required Oracle environment variables -export GORM_DSN='user="system" password="manager" \ -connectString="phoenix793630.dev3sub1phx.databasede3phx.oraclevcn.com:1661/cdb1_pdb1.regress.rdbms.dev.us.oracle.com" \ -libDir="/home/hkhasnis/projects/pkgs/23IC"' +missing_vars=() +for var in GORM_ORACLEDB_USER GORM_ORACLEDB_PASSWORD GORM_ORACLEDB_CONNECTSTRING GORM_ORACLEDB_LIBDIR; do + if [ -z "${!var}" ]; then + missing_vars+=("$var") + fi +done +if [ ${#missing_vars[@]} -ne 0 ]; then + echo "Error: The following environment variables must be set to run the tests: ${missing_vars[*]}" + echo "Example:" + echo " export GORM_ORACLEDB_USER=your_user" + echo " export GORM_ORACLEDB_PASSWORD=your_password" + echo " export GORM_ORACLEDB_CONNECTSTRING=your_connect_string" + echo " export GORM_ORACLEDB_LIBDIR=your_lib_dir" + exit 1 +fi # Check if passed-tests.txt exists if [ ! -f "passed-tests.txt" ]; then diff --git a/tests/tests_test.go b/tests/tests_test.go index af06ae3..2842c83 100644 --- a/tests/tests_test.go +++ b/tests/tests_test.go @@ -65,9 +65,32 @@ var newLogger = logger.New( }, ) -var oracleDSN = `user="system" password="manager" - connectString="phoenix793630.dev3sub1phx.databasede3phx.oraclevcn.com:1661/cdb1_pdb1.regress.rdbms.dev.us.oracle.com" - libDir="/home/hkhasnis/projects/pkgs/23IC"` +var oracleDSN = func() string { + user := os.Getenv("GORM_ORACLEDB_USER") + password := os.Getenv("GORM_ORACLEDB_PASSWORD") + connectString := os.Getenv("GORM_ORACLEDB_CONNECTSTRING") + libDir := os.Getenv("GORM_ORACLEDB_LIBDIR") + + missing := []string{} + if user == "" { + missing = append(missing, "GORM_ORACLEDB_USER") + } + if password == "" { + missing = append(missing, "GORM_ORACLEDB_PASSWORD") + } + if connectString == "" { + missing = append(missing, "GORM_ORACLEDB_CONNECTSTRING") + } + if libDir == "" { + missing = append(missing, "GORM_ORACLEDB_LIBDIR") + } + if len(missing) > 0 { + log.Fatalf("Missing required environment variables: %v. Please set them to run the tests.", missing) + } + return `user="` + user + `" password="` + password + `" + connectString="` + connectString + `" + libDir="` + libDir + `"` +}() func init() { var err error From 7b9ca38f48710876eecffdff1c6596324fb0f2fa Mon Sep 17 00:00:00 2001 From: Harshit Date: Thu, 14 Aug 2025 07:01:51 +0000 Subject: [PATCH 4/6] Refactor based on comments --- tests/main_test.go | 7 ++----- tests/passed-tests.txt | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/tests/main_test.go b/tests/main_test.go index e499717..c2e36bb 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -92,16 +92,13 @@ func TestSetAndGet(t *testing.T) { } } -func TestInsertScenarios(t *testing.T) { +func TesUserInsertScenarios(t *testing.T) { type UserWithAge struct { ID uint `gorm:"column:ID;primaryKey"` Name string `gorm:"column:NAME"` Age int `gorm:"column:AGE"` } - if err := DB.Migrator().DropTable(&UserWithAge{}); err != nil { - t.Fatalf("Failed to drop table: %v", err) - } if err := DB.AutoMigrate(&UserWithAge{}); err != nil { t.Fatalf("Failed to migrate table: %v", err) } @@ -126,7 +123,7 @@ func TestInsertScenarios(t *testing.T) { Name string `gorm:"column:NAME"` CreatedAt time.Time `gorm:"column:CREATED_AT"` } - + if err := DB.AutoMigrate(&UserWithTime{}); err != nil { t.Fatalf("Failed to migrate UserWithTime table: %v", err) } diff --git a/tests/passed-tests.txt b/tests/passed-tests.txt index 91bec2c..782d5c8 100644 --- a/tests/passed-tests.txt +++ b/tests/passed-tests.txt @@ -379,4 +379,4 @@ BenchmarkScanSlice BenchmarkScanSlicePointer BenchmarkUpdate BenchmarkDelete -TestInsertScenarios +TesUserInsertScenarios From 1e0d7ed243e46b94c3729ac81e0114a6e5b3b17d Mon Sep 17 00:00:00 2001 From: Harshit Date: Mon, 18 Aug 2025 05:32:02 +0000 Subject: [PATCH 5/6] Add Negative tests for insert query --- tests/main_test.go | 31 ++++++++++++++++++++++++++++--- tests/passed-tests.txt | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/tests/main_test.go b/tests/main_test.go index c2e36bb..aef922c 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -42,6 +42,7 @@ import ( "fmt" "testing" "time" + "strings" . "github.com/oracle-samples/gorm-oracle/tests/utils" ) @@ -92,13 +93,17 @@ func TestSetAndGet(t *testing.T) { } } -func TesUserInsertScenarios(t *testing.T) { +func TestUserInsertScenarios(t *testing.T) { type UserWithAge struct { ID uint `gorm:"column:ID;primaryKey"` - Name string `gorm:"column:NAME"` + Name string `gorm:"column:NAME;not null;size:100"` Age int `gorm:"column:AGE"` } + if err := DB.Migrator().DropTable(&UserWithAge{}); err != nil { + t.Fatalf("Failed to drop table: %v", err) + } + if err := DB.AutoMigrate(&UserWithAge{}); err != nil { t.Fatalf("Failed to migrate table: %v", err) } @@ -120,7 +125,7 @@ func TesUserInsertScenarios(t *testing.T) { type UserWithTime struct { ID uint `gorm:"column:ID;primaryKey"` - Name string `gorm:"column:NAME"` + Name string `gorm:"column:NAME;not null;size:100"` CreatedAt time.Time `gorm:"column:CREATED_AT"` } @@ -132,4 +137,24 @@ func TesUserInsertScenarios(t *testing.T) { if err := DB.Create(&user4).Error; err != nil { t.Errorf("Insert with default timestamp failed: %v", err) } + + invalidUser1 := UserWithAge{Age: 50} + if err := DB.Create(&invalidUser1).Error; err == nil { + t.Errorf("Expected NOT NULL constraint failure, got no error") + } + + invalidUser2 := UserWithAge{ID: user1.ID, Name: "Duplicate", Age: 40} + if err := DB.Create(&invalidUser2).Error; err == nil { + t.Errorf("Expected duplicate primary key error, got no error") + } + + invalidUser3 := UserWithAge{Name: "InvalidAge", Age: -10} + if err := DB.Create(&invalidUser3).Error; err != nil { + t.Logf("Insert with negative age failed as expected: %v", err) + } + + invalidUser4 := UserWithAge{Name: strings.Repeat("A", 300), Age: 20} + if err := DB.Create(&invalidUser4).Error; err == nil { + t.Errorf("Expected value too large error for oversized string, got no error") + } } diff --git a/tests/passed-tests.txt b/tests/passed-tests.txt index d1e8b6d..7e13ef3 100644 --- a/tests/passed-tests.txt +++ b/tests/passed-tests.txt @@ -383,4 +383,4 @@ TestRawQueryInjection TestWhereClauseInjection TestUpdateInjection TestFirstOrCreateInjection -TesUserInsertScenarios +TestUserInsertScenarios From eabaea38b56cb48adc98fb7e3061c776158268be Mon Sep 17 00:00:00 2001 From: Harshit Date: Mon, 18 Aug 2025 05:34:28 +0000 Subject: [PATCH 6/6] Add Negative tests for insert query --- tests/main_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/main_test.go b/tests/main_test.go index aef922c..bd0cbec 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -100,10 +100,6 @@ func TestUserInsertScenarios(t *testing.T) { Age int `gorm:"column:AGE"` } - if err := DB.Migrator().DropTable(&UserWithAge{}); err != nil { - t.Fatalf("Failed to drop table: %v", err) - } - if err := DB.AutoMigrate(&UserWithAge{}); err != nil { t.Fatalf("Failed to migrate table: %v", err) }